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 作为 BroadcastReceiveronReceive() 方法的参数之一提供。

只需在您的 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
 }

我这么说是因为我在你的方法中没有看到那行代码!