2012-03-22 42 views
0

我有一個活動A在TabHost,A startActivityForResult(B)然後B startActivityForResult(C)
我遇到的問題是,:
在C時,我的setResult(RESULT_OK,意圖),發生Android:失敗的傳遞結果ResultInfo

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.hackingtrace.vancexu/com.hackingtrace.vancexu.task.B}: java.lang.NullPointerException 

在B,I由

setTimeButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      Intent i = new Intent(view.getContext(), TaskTimeSet.class); 
      i.putExtra(TasksDbAdapter.KEY_ROWID, mRowId); 
      Calendar c = Calendar.getInstance(); 
      Date d = c.getTime();    
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
      String now = sdf.format(d); 
      i.putExtra("date", now); 

      startActivityForResult(i, ACTIVITY_EDIT_TIME); 
     } 

和用C開始C,I的setResult通過

confirmBtn.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(); 
      intent.putExtra("date", resultDate); 

      int h = timePicker.getCurrentHour(); 
      int m = timePicker.getCurrentMinute(); 
      String time = "" +h+":"+m; 
      Log.d(TAG, time); 
      intent.putExtra("time", time); 

      setResult(RESULT_OK, intent); 
      finish(); 
     } 
    }); 

然後在BI接收由

結果
protected void onActivityResult(int requestCode, int resultCode, 
     Intent intent) { 
    Log.d(TAG, "I am in " + requestCode + resultCode); 
    super.onActivityResult(requestCode, resultCode, intent); 
    if (requestCode == ACTIVITY_EDIT_TIME) { 
     if (resultCode == RESULT_OK) { 
      Log.d(TAG, "OK time set"); 
      String[] dateArr = intent.getStringExtra("date").split("-"); 
      String[] timeArr = intent.getStringExtra("time").split(":"); 
      int year = Integer.parseInt(dateArr[0]); 
      int month = Integer.parseInt(dateArr[1]); 
      int day = Integer.parseInt(dateArr[2]); 
      int hour = Integer.parseInt(timeArr[0]); 
      int minute = Integer.parseInt(timeArr[1]); 
      Log.d(TAG, ""+year+month+day+hour+minute);    
     } 
    } 
} 

但我從來沒有得到「Log.d(TAG,」「+ year + month + day + hour + minute);」正常運行。

我曾嘗試:
1:

if (getParent() == null) { 
       setResult(Activity.RESULT_OK, intent); 
      } 
      else { 
       getParent().setResult(Activity.RESULT_OK, intent); 
      } 

不工作:(
2:

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

錯誤 「了java.lang.RuntimeException」 沒有出現,但requestCode和resultCode始終爲0

感謝您的任何提示

vancexu

回答

2

在C中我putExtra 2字符串(resultDate和時間),但我錯過了它可能不會被初始化時,它意圖。所以我得到了錯誤:java.lang.NullPointerException

1

看起來你的活動B在C返回之前就被破壞了。您可以檢查的一件事是「開發工具」應用程序(它是大多數仿真器和設備上的應用程序圖標以及標記爲「開發人員選項」的冰淇淋三明治上的設置),以確保「不保留活動」選項沒有被檢查。

你可以做的一件事情來驗證B被銷燬是在活動B的onCreate方法中放置一個Log語句。然後,當活動C從B啓動時,通過按下「後退」按鈕退出C.這會破壞C(假設你沒有覆蓋Back按鈕),但它不會調用B的onCreate,除非B已經被銷燬。

+0

感謝您的幫助。是的,「它不會打電話給B的onCreate」我已證明。但是我能做些什麼來解決我的問題?我在模擬器中找到了「開發工具」應用程序,但未找到「不要保留活動」選項。 – vancexu 2012-03-22 16:12:07

+0

根據Android版本的不同,它可能會有所不同。在2.3.3下,它是開發工具>開發設置>「立即銷燬活動」。確保它沒有被選中。如果'onCreate'沒有被調用,那麼Activity B不會被銷燬。 – 2012-03-22 16:50:09

+0

感謝您的收看,Brian。 – vancexu 2012-03-23 02:25:08

相關問題