2011-11-16 196 views
0

我試圖讓我的onActivityResult函數中的resultCode成爲OK。但是,它一直保持爲0。我已經花了好幾天的時間,不知道爲什麼它不起作用。這是我的代碼。如果有人能幫助我,我會非常感激,謝謝。resultCode始終爲0

我的活動1類:

private class MyTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
       // process 
      return result; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      Intent i = new Intent(Activity1.this, Activity2.class); 
      i.putExtra("Value1", "This value one for ActivityOne "); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivityForResult(i, REQUEST_CODE); 
      textView.setText(result); 
     } 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
         // do something 
       } 
     } 

我的活動2類:

@Override 
    public void finish() { 
     Intent data = new Intent(); 
     data.putExtra("returnKey1", "return 1"); 
     setResult(RESULT_OK, data); 
     super.finish(); 
    } 

我的清單:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".Activity1" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Activity2" 
        android:label="@string/app_dialog_name" 
        android:launchMode="singleTop" 
        android:excludeFromRecents="true" 
       android:taskAffinity="" 
      android:theme="@android:style/Theme.Dialog"> 
     </activity> 
    </application> 
+0

變量RESULT_OK在哪裏和如何聲明? – NOSTRA

+0

@NOSTRA:RESULT_OK是在Activity中聲明的公共靜態最終常量。 – c05mic

+0

另外,當我嘗試調試它時,我注意到onActivityResult在MyActivity2開始前立即被調用。 –

回答

1

完成()實際上是回調不是一個你如活動生命週期的一部分。你能否確認你在MyActivity2中自己調用了finish()。

如果你不是自己調用finish(),你應該在MyActivity2的onDestroy()中調用setResult()方法。

希望這會有所幫助!

+0

準確地說,'finish'是你打電話的方法。這不是由Android調用的方法。 – Brigham

+0

是的,這是我如何稱呼我的完成: \t public void onClick(View view){ \t \t finish(); \t} –

+0

嘗試在onDestroy中設置setResult(),因爲它是活動完成時獲得的最後一個回調。 – c05mic

-1

如果你打電話給你的活動結束(),它會始終爲0的結果(http://developer.android.com/reference/android/app/Activity.html#finish()

還有另一種方法存在:finishActivity(INT requestCode)。

但是,如果你想把結果放在結果中,我們需要其他方式。那麼爲什麼你要重寫finish()方法?你從哪裏打電話給這個方法?

+0

當我儘量不覆蓋它,但它仍然是行不通的。我所說的完成()在我的onClick方法。非常感謝你的幫助 –

+1

我想一想:** i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); **是你的問題,刪除它,你會很開心:)爲什麼你需要這個標誌? – NOSTRA

+0

我需要這個標誌,因爲我需要它來提醒用戶,當他們在另一個應用程序。感謝您的回答 :)。對此,我真的非常感激。 –

2
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

是問題所在。根據文檔:

This flag can not be used when the caller is requesting a result from the activity being launched.