我知道有类似的问题: android-intent-bundle-always-null和intent-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)。
修改
以下答案正确且有效。这是我的错。我没有正确地将我的包传递给新意图。
答案 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);