Activity 在 Intent 中找不到 Bundle
Activity cant find Bundle in Intent
我正在使用 IntentService
(这是第一次),我打算 return 通过使用 Bundle 来获得此服务的结果。但是,当我这样做时,主要 activity 没有找到 Bundle
、returning null
。什么会导致这个?字符串键匹配!
下面的代码输出:
I/System.out: It's null
主要Activity:
public class MainMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//Some stuff here...
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(StorageHandler.TRANSACTION_DONE);
registerReceiver(broadcastReceiver, intentFilter);
Intent i = new Intent(this, StorageHandler.class);
startService(i);
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extra = getIntent().getBundleExtra("bundle");
if(extra == null){
System.out.println("It's null");
}
else {
ArrayList<String> objects = (ArrayList<String>) extra.getSerializable("objects");
System.out.println(objects.get(0));
}
}
};
}
IntentService:
public class StorageHandler extends IntentService{
public static final String TRANSACTION_DONE = "xx.xxxxx.xxxxxx.TRANSACTION_DONE";
public StorageHandler() {
super("StorageHandler");
}
public void onCreate(){
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent) {
notifyFinished();
}
private void notifyFinished(){
ArrayList<String> objects = new ArrayList<String>();
objects.add("Resulting Array here");
Bundle extra = new Bundle();
extra.putSerializable("objects", objects);
Intent i = new Intent();
i.setAction(xx.xxxxx.xxxxxx.StorageHandler.TRANSACTION_DONE);
i.putExtra("bundle", extra);
StorageHandler.this.sendBroadcast(i);
}
您正在使用 getIntent()
检索 广播的 意图。这是错误的。您必须使用的意图是 onReceive
的前一个参数。变化
Bundle extra = getIntent().getBundleExtra("bundle");
和
Bundle extra = intent.getBundleExtra("bundle");
您正在尝试从错误的 Intent
检索数据。
变化:
Bundle extra = getIntent().getBundleExtra("bundle");
收件人:
Bundle extra = intent.getBundleExtra("bundle");
包含您的数据的 Intent
作为 BroadcastReceiver
的 onReceive()
方法的参数之一提供。
只需在您的 Activity 中使用它:
在onResume
回调中你应该注册registerReceiver(broadcastReceiver, intentFilter);
并且在 onPause
回调中,您应该注销此接收器。在你的接收器中使用这个:
Bundle extra = intent.getBundleExtra("bundle");
在您的服务中使用此代码:
Intent i = new Intent(TRANSACTION_DONE).putExtra("bundle", extra);
this.sendBroadcast(i);
更多信息,请参见
不要在你的 onCreate MainActivity 中忘记这一点:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//All your code here
}
我这么说是因为我在你的方法中没有看到那行代码!
我正在使用 IntentService
(这是第一次),我打算 return 通过使用 Bundle 来获得此服务的结果。但是,当我这样做时,主要 activity 没有找到 Bundle
、returning null
。什么会导致这个?字符串键匹配!
下面的代码输出:
I/System.out: It's null
主要Activity:
public class MainMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//Some stuff here...
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(StorageHandler.TRANSACTION_DONE);
registerReceiver(broadcastReceiver, intentFilter);
Intent i = new Intent(this, StorageHandler.class);
startService(i);
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extra = getIntent().getBundleExtra("bundle");
if(extra == null){
System.out.println("It's null");
}
else {
ArrayList<String> objects = (ArrayList<String>) extra.getSerializable("objects");
System.out.println(objects.get(0));
}
}
};
}
IntentService:
public class StorageHandler extends IntentService{
public static final String TRANSACTION_DONE = "xx.xxxxx.xxxxxx.TRANSACTION_DONE";
public StorageHandler() {
super("StorageHandler");
}
public void onCreate(){
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent) {
notifyFinished();
}
private void notifyFinished(){
ArrayList<String> objects = new ArrayList<String>();
objects.add("Resulting Array here");
Bundle extra = new Bundle();
extra.putSerializable("objects", objects);
Intent i = new Intent();
i.setAction(xx.xxxxx.xxxxxx.StorageHandler.TRANSACTION_DONE);
i.putExtra("bundle", extra);
StorageHandler.this.sendBroadcast(i);
}
您正在使用 getIntent()
检索 广播的 意图。这是错误的。您必须使用的意图是 onReceive
的前一个参数。变化
Bundle extra = getIntent().getBundleExtra("bundle");
和
Bundle extra = intent.getBundleExtra("bundle");
您正在尝试从错误的 Intent
检索数据。
变化:
Bundle extra = getIntent().getBundleExtra("bundle");
收件人:
Bundle extra = intent.getBundleExtra("bundle");
包含您的数据的 Intent
作为 BroadcastReceiver
的 onReceive()
方法的参数之一提供。
只需在您的 Activity 中使用它:
在onResume
回调中你应该注册registerReceiver(broadcastReceiver, intentFilter);
并且在 onPause
回调中,您应该注销此接收器。在你的接收器中使用这个:
Bundle extra = intent.getBundleExtra("bundle");
在您的服务中使用此代码:
Intent i = new Intent(TRANSACTION_DONE).putExtra("bundle", extra);
this.sendBroadcast(i);
更多信息,请参见
不要在你的 onCreate MainActivity 中忘记这一点:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//All your code here
}
我这么说是因为我在你的方法中没有看到那行代码!