安卓:onActivityResult的数据始终为空

3

我在StackOverflow和Google上阅读了许多类似的问题,但它们都没有帮助我解决我的问题。我有两个活动,A和B。A通过一个活动来请求B的结果:

@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 CANCELED,DATA NULL”是我一直收到的信息。我错过了什么吗?也许我已经盯着这段代码看太久了!
编辑:更具体地说,为什么我会得到一个空返回值?

在您的IF循环中,应该检查intent!= null而不是null!= intent吗? 此外,在Activity B中的setResult中,只需放置RESULT_OK而不需要Activity。 - gilonm
屏蔽完成并没有什么作用。从我所了解的来看,null != intent 是更好的选择。无论如何,空值检查是有效的,问题在于我得到了空结果。 - qkzoo1978
顺便提一下,我看到你在上面声明了final变量(result_OK,canceled...),但是在意图和代码中你并没有使用它们...这可能与此有关吗?(你声明了一个final变量ACTIVITY_RESULT_OK,但在activity中你使用了Activity.RESULT_OK - gilonm
gilonm 不,这与此无关。我最初是针对期末考试进行的,然后在故障排除时将其更改为您现在看到的方式。刚才我自己回答了我的问题。这一切都与我在清单文件中拥有的一行有关,即launchMode="singleInstance",去掉它现在一切都很好。甚至不确定我为什么要把它放在那里。 - qkzoo1978
感谢您的评论和建议! - qkzoo1978
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接