2011-05-16 78 views
2

意圖返回空值onActivityResult

我有一個擴展DashboardActivity類的MainActivity類。在主活動類中有頂級操作欄,點擊時會進入AddReminderActivity類。頂部操作欄的作用是在Dashboard活動課定義爲

private void createReminder() { 
    // TODO: fill in implementation 
    Intent intent = new Intent(DashboardActivity.this,AddReminderActivity.class); 
    Log.i("in OnActivityResult", "create reminder called");  
    startActivityForResult(intent, ACTIVITY_CREATE); 
    Log.i("in OnActivityResult", "Start Activity called Result");  
} 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     Log.i("in OnActivityResult", "Activity Result" + resultCode);  
     super.onActivityResult(requestCode, resultCode, intent); 
     Log.i("in OnActivityResult", "Activity Result" + resultCode);  
     Log.i("in OnActivityResult", "intent Result" + intent.getExtras());  
     Bundle extras = intent.getExtras(); 
     Toast.makeText(getApplicationContext(),resultCode, Toast.LENGTH_SHORT).show(); 
     switch(requestCode){ 
     case ACTIVITY_CREATE: 
       if (resultCode == Activity.RESULT_OK) { 
       String title = extras.getString(ReminderDBAdapter.KEY_REMINDER_TITLE); 
       String content = extras.getString(ReminderDBAdapter.KEY_REMINDER_CONTENT); 
       mDbHelper.createReminder(title, content); 
       mDbHelper.close(); 
       } 
     startActivity(new Intent(this,ListReminder.class)); 
      break; 

     } 
     // TODO: fill in rest of method 

    } 

在AddReminderActivityClass我呼籲

btnSubmitReminder.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Bundle bundle = new Bundle(); 

      bundle.putString(ReminderDBAdapter.KEY_REMINDER_TITLE, mReminderTitle.getText().toString()); 
      bundle.putString(ReminderDBAdapter.KEY_REMINDER_CONTENT, mReminderContent.getText().toString()); 
      if(mRowId != null){ 
       bundle.putLong(ReminderDBAdapter.KEY_ROWID, mRowId); 
      } 
      System.out.println(mReminderTitle.getText().toString()); 
      Toast.makeText(getApplicationContext(), mReminderTitle.getText().toString(), Toast.LENGTH_SHORT).show(); 
      Intent mIntent = new Intent(); 
      mIntent.putExtras(bundle); 
      //setResult(RESULT_OK, mIntent); 
      if (getParent() == null) { 
        setResult(DashboardActivity.RESULT_OK, mIntent); 
      } else { 
       getParent().setResult(DashboardActivity.RESULT_OK, mIntent); 
      } 

      Log.i("in OnActivityResult", "set result" +RESULT_OK);  
      finish(); 

     } 
    }); 

但返回時回OnActivityResult意圖返回null,下面出現異常。我認不出是什麼問題

05-16 17:25:09.686: ERROR/AndroidRuntime(441): FATAL 

例外:主05-16 17:25:09.686: ERROR/AndroidRuntime(441): 了java.lang.RuntimeException:失敗 交付結果ResultInfo {誰= NULL, 請求= 0,結果= -1,數據=意向{ (具有額外)}}到活動 {com.babz.android.businessReminder/com.babz.android.businessReminder.MainActivity}: 機器人.content.res.Resources $ NotFoundException: 字符串資源ID#0xffffffff 05-16 17:25:09.686: 錯誤/ AndroidRuntime(441):在 android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 android.app.ActivityThread.access $ 2800(ActivityThread.java:125) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2063) 05-16 17:25:09.686: ERROR/AndroidRuntime (441):at android.os.Handler.dispatchMe ssage(Handler.java:99) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):at android.os.Looper.loop(Looper.java:123) 05-16 17:25: 09.686: ERROR/AndroidRuntime(441):在 android.app.ActivityThread.main(ActivityThread.java:4627) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 java.lang中。反應。方法.invokeNative(原生 方法)05-16 17:25:09.686: 錯誤/ AndroidRuntime(441):在 java.lang.reflect.Method.invoke(Method.java:521) 05-16 17 :25:09.686: 錯誤/ AndroidRuntime(441):在 com.android.internal.os.ZygoteInit $ MethodA ndArgsCaller.run(ZygoteInit.java:868) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05 -16 17:25:09.686: ERROR/AndroidRuntime(441):在 dalvik.system.NativeStart.main(母語 方法)05-16 17:25:09.686: ERROR/AndroidRuntime(441):通過引起: android.content.res.Resources $ NotFoundException: 字符串資源ID#爲0xffffffff 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 android.content.res.Resources.getText(參考資料。的java:201) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 android.widget.Toast.makeText(Toast.java:258) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):at com.babz.android.businessReminder.DashboardActivity.onActivityResult(DashboardActivity.java:68) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):at android.app。 Activity.dispatchActivityResult(Activity.java:3890) 05-16 17:25:09.686: ERROR/AndroidRuntime(441):在 android.app.ActivityThread.deliverResults(ActivityThread.java:3511)

回答

1

取消註釋setResult方法調用。

+0

setResult方法已在條件語句中調用。 – user755552 2011-05-22 03:56:36

1

至於我可以告訴你得到的異常,當您試圖得到一個鍵的值不捆綁存在,所以你的情況可能是其中之一:

String title = extras.getString(ReminderDBAdapter.KEY_REMINDER_TITLE); 
String content = extras.getString(ReminderDBAdapter.KEY_REMINDER_CONTENT); 

你可以通過在捆綁包上調用containsKey(String key)來詢問包是否存在密鑰,所以我建議您使用它來查明它是否屬於該情況。

+1

謝謝。但我有調試和價值捆綁。 – user755552 2011-05-22 03:55:55

+0

+1這可能不會回答這個問題,但對我來說.. – 2011-11-22 04:04:56

1

正如上師所說,你的setResult()方法沒有被調用。因此,意圖永遠不會被設置。

我正在做一個單獨的答案,因爲有一個需要解決的常見問題:使用錯誤 setResult()。

請確保您使用setResult(resultCode,intentData),而不是setResult(resultCode)。我必須強調一下,因爲很多書中的很多例子都使用後者,這意味着通過startActivityForResult()發送到Activity中的相同意圖只會返回相同的Intent。所有意圖必須直接添加,否則您每次都會在onActivityResult()中爲Intent獲取NULL。

1

實際上,這個問題是在這一行:

Toast.makeText(getApplicationContext(),resultCode, Toast.LENGTH_SHORT).show(); 

這導致異常,因爲參數resultCodeint,在這種情況下,makeText()方法假設值的資源ID(即:R.string.something )。在這種情況下,然而,該值爲-1,產生這樣的:

android.content.res.Resources$NotFoundException: String resource ID #0xffffffff 

你實際上是希望能調用makeText()方法,它接受String代替。試試這個:

Toast.makeText(getApplicationContext(),"ResultCode: " + resultCode, 
        Toast.LENGTH_SHORT).show();