2014-01-20 19 views
0

我在我的應用2個活動,活性1活性2。當啓動應用Acitivity1是是在活動1上的按鈕called.Clicking的人應帶你到Activity2。如何處理與Java的NullPointerException一個getIntent()方法

在Acivity2,一些數據處理完成,然後我用這樣一個意圖數據發送回活動1:

Intent in=new Intent(getApplicationContext(), Activity1.class); 
    in.putExtra("data", data); 
    startActivity(in); 

然後又回到了活動1我獲得意圖數據:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity1); 

    String data =(getIntent().getExtras().getString("data")); 

這裏的問題是,第一次啓動應用程序檢查意圖數據,它不存在,所以我得到nullpointerexception error.how我可以確保它檢查意向數據時,Activity2是以前的類?

+3

使用'startActivityForResult'。你可以使用'如果(getIntent()getExtras()= NULL!)' – Raghunandan

+0

'getIntent()hasExtra( 「數據」)。!'比'如果(getIntent()是更好的選擇getExtras()= NULL )' – Raghunandan

回答

2

您可以檢查是否意圖是利用現有的:

getIntent().hasExtra("data"); 

這將返回一個布爾值。

此外,如果奧尤想一些DATAS返回的第一個活動,你應該開始第二個與startActivityForResult

0
if (extras != null) { 
    if (extras.containsKey("data")) { 
     boolean hasData = extras.getBoolean("data", false); 

     // TODO: Do something with the value of "data". 
    } 
} 
0

把檢查過它

if(getIntent().getExtras()!=null){ 

    String data =(getIntent().getExtras().getString("data")); 

} 
+0

如果你使用不同的鍵將第三個活動的數據傳遞給MainActivity,那麼getIntent()。getExtras()將它爲空? – Raghunandan

0

按照以下步驟

1:從您的activity1的按鈕點擊調用如下

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

2:在您的活性2設置要回返回活性1如下的數據,如果你不希望返回回不設置任何東西。

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK,returnIntent);  
finish(); 

如果你不想返回數據

Intent returnIntent = new Intent(); 
setResult(RESULT_CANCELED, returnIntent);   
finish(); 

3:在您的活性1現在又處理返回的數據如下

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 
    } 
    } 
} 

編輯:

,如果你想嚴格使用自己的方法,在你的問題試試這個:

在活動1,你得到的意向數據: 保護無效的onCreate(捆綁savedInstanceState){ super.onCreate(savedInstanceState ); setContentView(R.layout。活性1);

String data ="default value"; 
try{ 
    data =(getIntent().getExtras().getString("data")); 
}catch(Exception e){ 
} 

}

+0

僅供參考請參閱http://stackoverflow.com/questions/10407159/android-how-to-manage-start-activity-for-result –

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(); 
     } 
    } 
} 

在活性2:

Intent intent=new Intent(); 
intent.putExtra("data",data); 
setResult(2,intent); 
finish(); 
相關問題