2013-05-10 8 views
20

Intent dataが常にnullである理由を誰かに教えてもらえますか?onActivityResult()インテントデータは常にnullです

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

if (resultCode == RESULT_OK) { 
    if (requestCode == UPDATE_PROFILE_REQUEST_CODE) { 

     if (data != null) { 
      User user = (User) data.getExtras().getSerializable(USER_DATA_EXTRA); 
      if (user != null) { 
       notifyNeedUpdate(user); 
      } 
     } else { 
      Log.e("Dev", "data is null"); 
     } 

    } 
} 

}

、これは私が結果を設定する方法です:

setResult(RESULT_OK, getIntent().putExtra(ProfileActivity.USER_DATA_EXTRA, constructUser())); 

constructUser()はちょうど私が必要とするオブジェクトを作成します。

私はいつもLog.e("Dev", "data is null");を取得します。

+0

あなたはどこからの結果を待っていますか?あなたの活動のもうひとつ?それは背中にあるのでしょうか? – o0rebelious0o

+0

別のアクティビティはい。いいえ、それは背中合わせではありません。 – Eugene

答えて

28

あなたは可能性としてここに投稿前setResultonStoponDestroyfinish ...など

+0

2番目のアクティビティが終了する前にsetResultが呼び出されていますか? – Nermeen

+0

よろしくお願いします。良い点、再確認してください。 – Eugene

+0

このコードのnunuの後にコールを終了するだけです。 –

18

を呼び出す必要があります。すなわち

setResult(RESULT_OK, getIntent().putExtra(ProfileActivity.USER_DATA_EXTRA, constructUser())); 

を呼び出す前に、あなたの第二の活動は、を終了していないことを確認します答えはあなたの問題ではないかもしれません。

このようなCK何か:

Intent returnIntent = new 
returnIntent.putExtra("result", app); 
returnIntent.putExtra("element", element); 
if (app.getStatus() == 2){ 
    returnIntent.putExtra("update", true); 
    // Tell the parent that everything went okay 
    setResult(Activity.RESULT_OK, returnIntent); 
    Log.i(TAG, "Returning, Result Success"); 
} else { 
    // Tell parent that nothing changed 
    setResult(RESULT_CANCELED, returnIntent); 
    Log.i(TAG, "Returning, Nothing changed"); 
} 
finish(); 

は私が返されるヌルの意図に苦しんで長い時間を過ごしました。私にとっては、onBackPressedでは上記のコードの前にsuper.onBackPressed()を呼び出していたからです。私はそれを置くときすべてがうまくいった。 onStop/onDestroyがあまりにも早く呼び出された場合、インテントを返す機会はブロックされます。これは問題の可能性があります

+8

+1 for super.onBackPressed() – Ankit

+0

+1は私を大いに助けました!私は2回目のアクティビティでonStop()のsetResultコードを持っていました。これはonActivityResultが実際に私のフラグメント内の結果を傍受していましたが、requestCodeが一致して結果コード30があったとしても、インテント(データ)コードをonStop()からonBackPressed()とbangに移動しました。データエクストラを取得できました。 –

+0

resultCode 30とは何ですか? –

-1

終了している間に、ActivityからActivityにデータを返す必要があります。

関連する問題