【问题标题】:MODE_PRIVATE in Broacast Receiver广播接收器中的 MODE_PRIVATE
【发布时间】:2013-05-06 06:07:42
【问题描述】:

我在一个名为 Receiver 的类中定义了一个函数,它扩展了广播接收器。 函数代码如下:

public List<DatabaseRow> ToUpload()
           { 
             sampleDB =  openOrCreateDatabase(TABLE_NAME, MODE_PRIVATE, null);
             // sampleDB.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME);
         Create_Database();
         List<DatabaseRow> list;
         list=Get_Raw("uploaded","no");
         Log.v("TEST", "Size: "+ list.size() );
         int tot = list.size();
    //   return list;
          for (int i=0; i < tot; i++)
           { Log.v("Video id: "+ list.get(i).id, "Video_path: "+ list.get(i).video_path);
           }
           return list;
         // list.get(0).video_path
        // Log.v("TEST", "Size: "+ list.get(0).title);


           }

它提取数据库的一些行。在 Eclipse 中,我收到错误 MODE_PRIVATE 无法解析为变量。我试图在活动中定义相同的功能并且它有效。广播接收器有什么问题以及我必须做些什么来解决它。 我已经导入了 Context。

【问题讨论】:

    标签: android broadcastreceiver mode


    【解决方案1】:

    MODE_PRIVATE 是在Context 类中声明的整数。活动类继承自Context,这使得MODE_PRIVATE 可以从每个活动中直接访问。

    BroadcastReceiver not 继承自 Context,因此 MODE_PRIVATE 不能直接访问。

    因为它是public static,你可以这样访问它:

    Context.MODE_PRIVATE
    

    【讨论】:

    • 如果我尝试像这样插入 Context.MODE_PRIVATE:sampleDB = openOrCreateDatabase(TABLE_NAME,Context.MODE_PRIVATE, null); MODE_PRIVATE 上的错误消失了,但我在函数上收到错误消息: Receiver 类型的方法 openOrCreateDatabase(String, int, null) 未定义。
    • @user2312945 这是同样的问题。 BroadcastReceiver 不包含名为openOrCreateDatabase 的方法。它在Context 中声明。您需要引用您的上下文来调用该方法。这样的参考是例如。在接收者的onReceive 方法中提供。
    • 那么我在实践中应该怎么做呢?
    • @user2312945 你应该得到你的Context 的引用,这样你就可以写context.openOrCreateDatabase(..)。在onReceive 方法中,上下文作为参数给出。如果可能,请使用该方法并将其传递给您的 ToUpload 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多