2011-07-14 38 views
1

無法找出這一個。完成的研究,在這裏搜索,在線等等。仍然是Java/Android的新程序員,但看起來我正在做這件事,所以在這裏。Android:Subactivity在onActivityResult中返回NULL意圖對象

我的主要活動根據所觸及的菜單條目開始幾個子活動。對於每一個我用一些「額外」字符串數據將一個包傳遞給子活動。每個子活動檢索數據,進行一些處理,然後使用.putExtra()將新的/更改的數據重新放入一個包中,並使用finish()退出子活動。

這是工作正常,但其中一個子活動。在這一個子活動中,當我返回到onActivityResult時,意圖對象是NULL而不是「有額外」。我嘗試了很多東西,但我無法完成它的工作。下面是一些框架代碼,我希望這將有助於證明了這一點:

在父活動,onOptionItemsSelected的一部分,子活動啓動:

 case R.id.read_file: 
     Intent intentR = new Intent(this, GetReadFileName.class); 
     intentR.putExtra(GetReadFileName.EXTRA_WHATEVER, baseDirectory); 
     startActivityForResult(intentR, REQUEST_READ_FILE_NAME); 
     return true; 

    case R.id.write_file: 
     Intent intentW = new Intent(this, GetWriteFileName.class); 
     intentW.putExtra(GetWriteFileName.EXTRA_FILE_NAME, fileName); 
     startActivityForResult(intentW, REQUEST_WRITE_FILE_NAME); 
     return true; 

子活動GetWriteFileName:

public class GetWriteFileName extends Activity{ 

String fileName; 

public static String EXTRA_FILE_NAME = "file_name"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.wfn); 

    fileName = getIntent().getExtras().getString(EXTRA_FILE_NAME); 
    // fileName is PROPERLY received from parent. No issues here. 
    . 
    . do processing 
    . 
    Intent intent = new Intent(); 
    intent.putExtra(EXTRA_FILE_NAME, fileName); // put changed/modified name in bundle for parent 

    setResult(Activity.RESULT_OK, intent); 
    finish(); 

子活動GetReadFileName:

public class GetReadFileName extends Activity { 
/** Called when the activity is first created. */ 

public static String EXTRA_WHATEVER = "whatever"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

String extStorageDir = Environment.getExternalStorageDirectory().toString() + getIntent().getExtras().getString(EXTRA_WHATEVER); 
// extStorageDir is PROPERLY retrieved from parent. No issue here. 
. 
. do processing 
. 
Intent intent = new Intent(); 
intent.putExtra(EXTRA_WHATEVER, "Just a damn string"); // Stuff to pass back OUT to parent 
// Note: doesn't matter if I have a literal, String variable, or anything else here. End result is the same. 

setResult(Activity.RESULT_OK); 
finish(); 

最後,在onActivit yResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 

    case REQUEST_WRITE_FILE_NAME: 
     if (resultCode == Activity.RESULT_OK) { 
      fileName = data.getExtras().getString(GetWriteFileName.EXTRA_FILE_NAME); 
     } 
     break; 

    case REQUEST_READ_FILE_NAME: 
     if (resultCode == Activity.RESULT_OK) { 
      fileName = data.getExtras().getString(GetReadFileName.EXTRA_WHATEVER); 
     } 
     break; 

你會的,我希望,原諒離開了花括號的,等

的問題是,當GetWriteFileName在調試器返回到父意向數據顯示爲「有額外「和字符串可以被檢索。

當GetReadFileName返回到父意圖數據是NULL,這就是問題所在。爲什麼它是NULL?從我的角度來看,我在兩項活動中都做了同樣的事情,以便將東西還給父母。我的Android Manifest文件包含我認爲應該的內容。關鍵字段似乎是正確的。我被困在這裏。想法?

科清單文件:

 <activity android:name=".DeviceListActivity" 
       android:label="@string/select_device" 
       android:theme="@android:style/Theme.Dialog" 
       android:configChanges="orientation|keyboardHidden" /> 
    <activity android:name=".GetWriteFileName" 
       android:theme="@android:style/Theme.Dialog" 
       android:configChanges="orientation|keyboardHidden" /> 
    <activity android:name=".GetReadFileName" 
       android:theme="@android:style/Theme.Dialog" 
       android:label="@string/select_file" 
       android:configChanges="orientation|keyboardHidden" /> 
    /> 

感謝您在閱讀這些文檔。

回答

2

在你的寫作子活動中,你傳回了意圖。 在你閱讀的一篇中,你沒有。

setResult(Activity.RESULT_OK, intent); 

,而不是

setResult(Activity.RESULT_OK); 
+0

哦兄弟。謝謝!而已。我怎麼會錯過?再次感謝。 –

+0

完全沒問題。 –