【问题标题】:Android: How to access variables from BroadcastReceiver in Activity?Android:如何从 Activity 中的 BroadcastReceiver 访问变量?
【发布时间】:2015-04-13 09:44:20
【问题描述】:

我有一个类 Connect,它需要一个 Activity 引用来访问 UI.thread。在里面我有这个广播:

JSONArray json = new JSONArray(split);
Log.i(TAG, "JSON Array: " + json.toString());
String[] userNames = new String[json.length()];
for(int user = 0; user < json.length(); user++)
{
  userNames[user] = json.getString(user);
}
Intent mainIntent = new Intent();
mainIntent.putExtra("OnlineUsers", userNames);
mainIntent.setAction("com.app.SEND_DATA");
activity.sendBroadcast(mainIntent);

在我的 MainActivity

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
      // Extract data included in the Intent
      String[] usersNames = intent.getStringArrayExtra("OnlineUsers");
      Log.i(TAG, "Got message: " + Arrays.toString(usersNames));
    }
};

我在 MainActivity 内的 onCreate() 中注册广播:

IntentFilter filter = new IntentFilter("com.app.SEND_DATA");
registerReceiver(mMessageReceiver, filter);

现在如何在我的 onCreate 方法中访问 userNames,或者您认为有更好的方法在我的 Connect 连接时将变量传递给 Activity strong> 类获取该 Activity 的引用

【问题讨论】:

  • 尝试在您的活动类中使用接口覆盖方法。

标签: java android broadcastreceiver


【解决方案1】:

使用处理程序和消息。

这里是示例:

处理程序mhandle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    mhandle = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String[] user_name = (String[])msg.obj;
            //some code//
        }
    };
    //and registerReceiver//
    IntentFilter filter = new IntentFilter("com.app.SEND_DATA");
    registerReceiver(mMessageReceiver, filter);
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Extract data included in the Intent
        String[] usersNames = intent.getStringArrayExtra("OnlineUsers");
        Log.i(TAG, "Got message: " + Arrays.toString(usersNames));
        Message msg = new Message();
        msg.obj = usersNames;
        mhandle.sendMessage(msg);
    }
};

我希望工作。

【讨论】:

  • 哦。和 super.handleMessage(msg);没什么。你可以删除它。
【解决方案2】:

我认为您无法访问 onCreate() 中的 usersNames 变量。这样做是愚蠢的,因为如果正确,您的用户名将未定义或为空。

如果您想更改 TextView 或 EditText 或其他任何内容,请在 onReceive() 中进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多