Java Android:如何在活动中从BroadcastReceiver访问变量?

Java Android:如何在活动中从BroadcastReceiver访问变量?,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我有一个类Connect,它引用一个活动来访问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] = js

我有一个类Connect,它引用一个活动来访问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);
我在main活动中的onCreate()中注册广播:

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

现在如何在我的onCreate方法中访问用户名,或者当我的Connect类引用该活动时,您认为有更好的方法将变量传递给该活动吗?

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


如果要更改TextView或EditText或其他内容,请在onReceive()中执行此操作。

使用Handler和Messege

此处示例:

汉德勒

@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);没什么。你可以删除它。
@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);
    }
};