2014-03-28 109 views
2

我已經在StackOverflow以及Google上閱讀了許多類似的情況,但他們都沒有幫助我解決這個問題。我有兩個活動,A和B. A與結果的活動稱之爲B:Android:onActivityResult數據始終爲空

@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」是我所有得到的。我在這裏錯過了什麼嗎?也許我一直在盯着這段代碼太久了!

編輯:爲了更具體的與我的問題,爲什麼我得到一個空回報?

+0

在你的IF循環中,你不應該檢查'intent!= null'而不是'null!= intent'嗎? 另外,在'setResult'的Activity B中 - 只需放置'RESULT_OK'而不需要Activity。 – gilonm

+0

屏蔽完成什麼都不做。 null!=意圖是我讀過的更好的選擇。在任何情況下,空檢查工作正常,它爲什麼我得到空結果多數民衆贊成在這個問題。 – qkzoo1978

+0

順便說一句,我看到你已經宣佈了最後的變數(result_OK,取消...),但在意圖和你的代碼,你不使用它們..可能與此有關? (您聲明'在最終的變數ACTIVITY_RESULT_OK',但在活動中,你使用'Activity.RESULT_OK' – gilonm

回答