我的应用程序中有2个活动,活动1 和活动2 。当应用程序启动时,Acitivity1是被调用的活动。单击Activity1中的按钮应该你到Activity2。
在Acivity2中,完成了一些数据处理,然后使用这样的意图将数据发送回Activity1:
Intent in=new Intent(getApplicationContext(), Activity1.class);
in.putExtra("data", data);
startActivity(in);
然后返回Activity1我获取意图数据:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
String data =(getIntent().getExtras().getString("data"));
这里的问题是,应用程序第一次启动它时会检查意图数据并且它不存在所以我得到nullpointerexception error.how我可以确保它在Activity2是前一个类时检查意图数据吗?
答案 0 :(得分:2)
您可以使用以下方法检查意图是否存在:
getIntent().hasExtra("data");
这将返回一个布尔值。
如果oyu想要将某些数据返回到第一个活动,那么您应该使用startActivityForResult
答案 1 :(得分:0)
if (extras != null) {
if (extras.containsKey("data")) {
boolean hasData = extras.getBoolean("data", false);
// TODO: Do something with the value of "data".
}
}
答案 2 :(得分:0)
检查一下
if(getIntent().getExtras()!=null){
String data =(getIntent().getExtras().getString("data"));
}
答案 3 :(得分:0)
按照以下步骤
1:从 activity1的按钮点击,按以下方式调用
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
2:在 Activity2 中,将您要返回的数据设置为 Activity1 ,如下所示,如果您不想返回,请不要设置任何内容
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
如果您不想返回数据 :
Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();
3:现在再次在 Activity1 处理返回数据,如下所示
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
修改强>
如果您在问题中严格要使用自己的方法,请尝试以下方法:
在Activity1中获取意图数据: protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity1);
String data ="default value";
try{
data =(getIntent().getExtras().getString("data"));
}catch(Exception e){
}
}
答案 4 :(得分:0)
使用ActvityForResult
。
替换这些代码。
在ACTVITY1中:
将此内容放在onCreate
之后:
@Override
protected void onActivityResult(int requestCode ,int resultCode ,Intent data ) {
super.onActivityResult(requestCode, resultCode, data);
String name =data.getStringExtra("data");
if(resultCode == RESULT_OK){
switch(requestCode){
case 2:
if(resultCode == RESULT_OK){
Toast.makeText(this, name, Toast.LENGTH_LONG).show();
}
}
}
在ACTIVITY2中:
Intent intent=new Intent();
intent.putExtra("data",data);
setResult(2,intent);
finish();