如何使用java nullpointerexception处理getIntent()方法

时间:2014-01-20 14:14:34

标签: java android nullpointerexception

我的应用程序中有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是前一个类时检查意图数据吗?

5 个答案:

答案 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();