onActivityResult - resultCode 总是为 0

3
我在使用onActivityResult时遇到了问题,无论我做什么都无法正确获取resultCode。
我知道有类似的问题,但最终它们并没有帮助我解决问题。 MainActivity: 这个方法将打开一个新的Activity Popup.class
public void openShopView(){
    Intent intent = new Intent(this, Popup.class);
    Bundle b = new Bundle();

    b.putString("which", "ShopMain");
    intent.putExtras(b);
    startActivityForResult(intent, 1);
}

第二个活动:这个方法将打开另一个活动Popup.class,但是布局不同。

shop_c1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getIntent());
            Bundle b = new Bundle();

            b.putString("which", "ShopBuildings");
            intent.putExtras(b);
            startActivity(intent);
            finish();
        }
    });

第三个活动: 有一个方法应该设置结果并关闭活动

building2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.i("LOG_NEW: ", "" + getCurrentBuildingTable(1) + ", " + checkSlotTable(1));
            if(getCurrentBuildingTable(1) && checkSlotTable(1) == -1) {
                Intent returnIntent = getIntent();
                returnIntent.putExtra("result", 1);
                setResult(RESULT_OK, returnIntent);
                finish();
            }else if (checkSlotTable(1) == -1){
                Log.i("LOG_NEW: ", "Building already exist");
            }
            else{
                Log.i("LOG_NEW: ", "Not enough resources");
            }
        }
    });

最后,从MainActivity中有一个onActivityResult()方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.i("LOG_RES: ", "Checking.. " + requestCode + ", " + resultCode);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            String result = data.getStringExtra("result");
            Log.i("LOG_RES: ", result);

        }
    }
}

无论我做什么,我都无法启动if(resultCode == RESULT_OK)循环,而且resultCode始终为0。

感谢您的帮助。


1
setResult 必须在第二个活动中调用,因为第二个活动的意图是通过 startActivityForResult 传递的。 - undefined
正如@Saurabh所说,结果仅从使用startActivityForResult启动的活动中接收。 - undefined
@Saurabk 谢谢你的回答,但有没有办法从第三个活动中发送结果,或者我应该将结果发送到第二个活动,然后再发送到主活动? - undefined
1
是的,正如我在答案中所写的那样,第三个大于第二个大于第一个。 - undefined
1个回答

4

setResult 必须在第二个Activity中调用,因为第二个Activity的意图是通过startActivityForResult传递的。

但是,您可以将第三个Activity的结果代码委托给第二个Activity,然后再传递给第三个Activity。

将您的第二个Activity更改为以下内容:

shop_c1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getIntent());
                Bundle b = new Bundle();

                b.putString("which", "ShopBuildings");
                intent.putExtras(b);
                startActivityForResult(intent,1);
                //Remove finish from here
            }
        });

然后在第二个活动中也添加这个。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1){
    setResult(resultCode,data);
    }

    finish();
}

1
谢谢,这个工作得很好,你救了我;) 只是一个小提示,如果有人感兴趣,我把returnIntent.putExtra("result", 1); 改成了returnIntent.putExtra("result", "1");,因为遇到了NullPointerException。 - undefined

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