Android:Subactivity在onActivityResult中返回NULL Intent对象

时间:2011-07-14 14:11:43

标签: android android-intent subactivity

无法想出这个。完成研究,在这里搜索,在线等等。仍然是Java / Android的新程序员,但似乎我做得对,所以这里就是。

我的主要活动根据触摸的菜单条目启动多个子活动。对于其中的每一个,我使用一些“额外”字符串数据将一个包传递给子活动。每个子活动检索数据,进行一些处理,然后将新/更改的数据放回到带有.putExtra()的包中,并以finish()退出子活动。

除了一个子活动外,其他所有功能都正常。在这一个子活动中,当我返回onActivityResult时,intent对象是NULL而不是“has extras”。我尝试了很多东西,但我无法让它发挥作用。这是一些骨架代码,我希望这有助于证明这一点:

在父活动中,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();

最后,在onActivityResult:

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返回到父 Intent数据在调试器中显示为“有额外内容”并且可以检索字符串。

当GetReadFileName返回父 Intent数据时为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" />
    />

感谢您阅读所有这些内容。

1 个答案:

答案 0 :(得分:3)

在你的写子活动中,你传回了意图。 在你的阅读中,你没有。

setResult(Activity.RESULT_OK, intent);

而不是

setResult(Activity.RESULT_OK);