我有一个类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);
在我的主活动中
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方法中的用户名,或者您认为当我的Connect类引用该活动时,有更好的方法将变量传递给活动?
使用 Handler 和 Messege。
这里的例子:
Handler 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);
}
};
我希望工作。
我认为您无法访问onCreate()中的userNames变量。这样做是愚蠢的,因为如果您的用户名正确,它将是未定义的或空的。
如果你想改变TextView或EditText或其他任何东西,请在onReceive()中进行操作。