为什么onActivityResult返回,但我得到了正确的requestCode?

时间:2012-05-08 12:06:58

标签: android android-intent null onactivityresult

我正在构建一个应用程序,其中第一个Activity由startActivityByResult启动另一个Activity。完成一些设置后,我需要重新发送设置结果。

所以我覆盖第二个Activity的onPause()方法,我得到了意图putExra,并通过setResult()发回。

回到第一个活动。肯定被称为onActivityResult。我之前设置了resultCode,但意图数据为null。我无法弄清楚出了什么问题。

这是我的代码:

第一个活动

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("page1", requestCode + "_");
    Log.e("page1", resultCode + "_");
    Log.e("page1", (data == null) + "_");
    // if ((requestCode == 1) && (data != null)) {
    if (data != null) {
        String size = data.getStringExtra("size");
        Log.e("switch", size + "_");
        switch (size.charAt(0)) {
        case '1': {
            text.setTextSize(10);
        }
            break;
        case '2': {
            text.setTextSize(20);
        }
            break;
        case '3': {
            text.setTextSize(30);
        }
            break;
        }
    }
}

我的第二个活动

    @Override
protected void onPause() {

    Intent intent = getIntent();
    Log.e("prefs", (intent == null) + "_");
    intent.putExtra("size", size);
    setResult(3, intent);
    super.onPause();
}

我在LogCat中测试过。在第二个活动中。要发送的意图绝对不是空的。但是当它进入第一个Activity时。 Null刚回来。这让我非常疯狂。

2 个答案:

答案 0 :(得分:1)

您的代码问题在String size = data.getStringExtra("size");这一行。 您应该使用String size = data.getExtras.getString("size");

进行更改

在您的第一项活动中:

Intent intent = new Intent(context,SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);

在你的第二个活动中,在其监听器中创建一个名为SAVE的按钮;

        Intent result = new Intent();
        Bundle bundle = new Bundle();

        bundle.putString("keyName", "KeyValue");

        result.putExtras(bundle);
        setResult(RESULT_OK,result);
        finish();

再次在您的第一个活动的onActivityresult方法中:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==RESULT_OK){
        if(requestCode == REQUEST_CODE){
            Log.d("Activity Result", data.getExtras.getString("keyName");
        }
    }
}

答案 1 :(得分:0)

你能试试吗? 你想在所有情况下手动暂停并在后退时自动完成你的活动,所以最好将你的意图数据保存在onDestroy中

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

    @Override
    public void onDestroy() {
        Intent intent = getIntent();
        intent.putExtra("size", size);
        setResult(3, intent);
        super.onDestroy();
    }