2014-03-28 2 views
2

저는 StackOverflow와 Google에서 비슷한 상황을 많이 읽었지만 제 경우에는 도움이되지 않았습니다. 나는이 개 활동하는이 있고 B. A는 결과에 대한 활동과 B를 호출Android : onActivityResult 데이터는 항상 null

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.mnuMainSettings: 
      startActivity(new Intent(ActivityMain.this, ActivitySettings.class)); 
      break; 
     case R.id.mnuMainHelp: 
      startActivity(new Intent(ActivityMain.this, ActivityHelp.class)); 
      break; 
     case R.id.mnuMainEULA: 
      Intent intent = new Intent(ActivityMain.this, ActivityDisclaimer.class); 
      startActivityForResult(intent, 1); 
      break; 
    } 
    return true; 
} 

활동 B :

public class ActivityDisclaimer extends Activity 
{ 

    private WebView webView; 

    public static final int ACTIVITY_RESULT_DISCLAIMER = 1; 
    public static final String ACTIVITY_RESULT = "result"; 
    public static final int ACTIVITY_RESULT_OK = 1; 
    public static final int ACTIVITY_RESULT_CANCELED = 2; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.disclaimer); 

     webView = (WebView) findViewById(R.id.WebViewDisclaimer); 
     webView.loadUrl("file:///android_asset/disclaimer.html"); 

    } 

    public void onClickDisclaimerBtnAccept(View view) { 
     Prefs prefs = new Prefs(this); 
     prefs.setAcceptDisclaimer(true); 
     prefs.commit(); 

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

    public void onClickDisclaimerBtnDecline(View view) { 
     Prefs prefs = new Prefs(this); 
     prefs.setAcceptDisclaimer(false); 
     prefs.commit(); 

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

} 

그러나, 내 onActivityResult를 방법, 데이터는 의도로 반환 항상 NULL이다 .

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     // For response from disclaimer activity 
     if (requestCode == 1) { 

      if (resultCode == Activity.RESULT_OK){ 
       if (null != intent) { 
        Boolean accepted = intent.getBooleanExtra("result", false); 
        Log.d(TAG, "Boolean Data: " + accepted.toString()); 
        if (!accepted) finish(); 
       } else { Log.d(TAG, "RESULT OK, DATA NULL"); } 
      } 
      if (resultCode == Activity.RESULT_CANCELED){ 
       if (null != intent) { 
        Boolean accepted = intent.getBooleanExtra("result", false); 
        Log.d(TAG, "Boolean Data: " + accepted.toString()); 
        finish(); 
       } else { Log.d(TAG, "RESULT CANCELED, DATA NULL"); } 
      } 

     } 
    }//onActivityResult 

"RESULT CANCELLED, DATA NULL"은 내가 얻은 전부입니다. 내가 여기 뭔가를 놓친 적이 있니? 아마도 나는이 코드를 너무 오래 꼼짝 않고 바라 보았을 것입니다!

편집 : 내 질문에 더 구체적으로 말하자면, 왜 null 반환을 얻고 있습니까?

+0

IF 루프에서'intent! = int''가 아닌'intent! = null'을 확인하지 않아야합니까? 또한, 액티비티 B의'setResult' - 액티비티가 없으면'RESULT_OK'를 넣으십시오. – gilonm

+0

마무리를 차단하면 아무 효과가 없습니다. null! = intent는 내가 읽은 것보다 나은 선택입니다. 어떤 경우에는 null 검사가 잘 작동하고 있는데, 그 이유는 null 결과를 얻는 이유입니다. – qkzoo1978

+0

BTW, 위의 최종 vars 선언 (result_OK, cancelled ...)을 보았습니다. 의도와 코드에서 사용하지 마십시오. 관련성이 있습니까? (당신은 최종 변수에서'ACTIVITY_RESULT_OK'를 선언했으나 Activity.RESULT_OK'를 사용한 활동에서 – gilonm

답변

관련 문제