我有一个Android应用程序,其中有两个活动。启动活动是用户选择类别的位置,第二个活动是用户玩游戏并获得结果的位置。然后将此结果传递回第一个要在Facebook上发布的活动。
要在活动之间传递数据,我使用此代码:
Bundle extras = new Bundle();
extras.putInt("categoryid", categoryid);
Intent i = new Intent(MenuView.this, CreateTestView.class);
i.putExtras(extras);
startActivity(i);
这有两个方面。现在我的问题: 我第一次启动MenuActivity时没有传递包,因此当我尝试检索附加内容时,我得到一个nullpointer异常。我怎样才能在启动时使用支票来查看是否有捆绑过程?
我试过这种方式:
Bundle b = this.getIntent().getExtras();
if(b==null){}
else{
noqs = b.getInt("noqs");
point = b.getInt("point");
但是每次都是b == null,即使在完成游戏并且从GameActivity发送包之后也是如此。
答案 0 :(得分:2)
从你的MainActivity
开始,您可以通过GameActivity
启动子startActivityForResult
,一旦完成,您就可以通过onActivityResult
收回游戏结果。
这样的事情:
MainActivity:
private void startGameActivity() {
Intent i = new Intent(getApplicationContext(), GameActivity.class);
i.putExtra("some.key.here", "value");
startActivityForResult(i, 0);
}
@Override protected void onActivityResult( int req, int resp, Intent data ) {
super.onActivityResult(req, resp, data);
// process your received "data" from GameActivity ...
}
GameActivity:
public void onCreate( Bundle savedInstanceState ) {
// ...
Bundle b = getIntent().getExtras();
// ... process your extras from MainActivity
}
public void finishMySubActivity() {
Intent data = new Intent();
data.putExtra("some.other.key", GameResultsHere);
setResult(RESULT_OK, data);
finish();
}