在Intent中设置后,Bundle为null

时间:2012-04-11 14:24:21

标签: android android-intent null bundle

我知道有类似的问题: android-intent-bundle-always-nullintent-bundle-returns-null-every-time,但没有正确答案。

在我的Activity 1

public void goToMapView(Info info) {
    Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);
    //intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);
}

在信息中:

public void write(Intent intent) {
    Bundle b = new Bundle();
    b.putInt(AppConstants.ID_KEY, id);
    ... //many other attributes
    intent.putExtra(AppConstants.BUNDLE_NAME, b);
}
public static Info read(Bundle bundle) {
    Info info = new Info();
    info.setId(bundle.getInt(AppConstants.ID_KEY));
    ... //many other attributes
    return info;
}

在MapViewActivity(Activity 2)中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_view);

    Bundle extras = getIntent().getBundleExtra(AppConstants.BUNDLE_NAME);
    info = Info.read(extras);
    ...
}

问题是extras包总是为空。我已经调试了它,并且Intent(intent = getIntent())将所有字段设置为null,除了一个指示这是什么类(MapViewActivity)。

我也试过通过intent.putExtras(b)放置捆绑包具有相同的效果。 intent.putExtra("asdf", true)仅用于调试原因 - 我也无法获取此数据(因为getIntent()几乎所有字段都设置为null)。

修改

以下答案正确且有效。这是我的错。我没有正确地将我的包传递给新意图。

2 个答案:

答案 0 :(得分:4)

我不确定“信息”是什么用,但我建议在涉及其他数据对象之前,首先将数据从一个活动传递到另一个活动。

活性1

    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);

活性2

    Bundle bundle = getIntent.getExtras();
    if (bundle!=null) {
        if(bundle.containsKey("asdf") {
            boolean asdf = bundle.getBooleanExtra("asdf");
            Log.i("Activity2 Log", "asdf:"+String.valueOf(asdf));
        }
    } else {
        Log.i("Activity2 Log", "asdf is null");

    }

答案 1 :(得分:3)

活动1

Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);

        Bundle b = new Bundle();
         b.putBoolean("asdf", true);
         b.putInt(AppConstants.ID_KEY, id);
         intent.putExtras(b);

         startActivity(intent);

活动2

Bundle extras = getIntent().getExtras();

 boolean bool = extras.getBoolean("asdf");
 int m_int = extras.getInt(AppConstants.ID_KEY,-1);