【问题标题】:onActivityResult - resultCode is always 0onActivityResult - resultCode 始终为 0
【发布时间】:2017-02-03 20:18:47
【问题描述】:

我的 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);
}

Second Activity: 方法将打开另一个 ActivityPopup.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..

感谢您的帮助

【问题讨论】:

  • setResult 必须在 Second Activity 中调用,因为第二个 Activity 的意图是在 startActivityForResult 中传递的
  • 正如@Saurabh 所说,仅从使用 startActivityForResult 启动的活动接收结果。
  • @Saurabk 感谢您的回答,但有什么方法可以发送第三个活动的结果,或者我应该将结果发送到第二个活动并从那里发送到 mainactivity?
  • 是的,第 3 次 > 第 2 次 > 第 1 次,正如我在回答中所写的那样。

标签: android


【解决方案1】:

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

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

将您的 Second 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
            }
        });

然后在Second Activity

中也添加这个
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1){
    setResult(resultCode,data);
    }

    finish();
}

【讨论】:

  • 谢谢,这很好用,你救救我 ;) 请注意,如果有人感兴趣,我将 returnIntent.putExtra("result", 1); 更改为 returnIntent.putExtra("result", "1"); 因为 NullPointerException
猜你喜欢
  • 2018-04-08
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多