Java Android:如何在活动中从BroadcastReceiver访问变量?
我有一个类Connect,它引用一个活动来访问UI.thread。里面有一段广播: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
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);
}
};