Android Can';我不明白为什么onActivityResult是';行不通

Android Can';我不明白为什么onActivityResult是';行不通,android,android-intent,Android,Android Intent,第二个活动的“setResult”要么没有将数据传回第一个活动的onActivityResult,要么onActivityResult甚至没有被调用。。。我不知道是哪个 第一项活动: //-- Handle item selection @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings:

第二个活动的“setResult”要么没有将数据传回第一个活动的onActivityResult,要么onActivityResult甚至没有被调用。。。我不知道是哪个


第一项活动:

//-- Handle item selection
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            Intent i = new Intent(this, Options.class);
            Bundle counters = new Bundle();
            counters.putInt("plWin", plWin);
            counters.putInt("plLoss", plLoss);
            counters.putInt("plDraw", plDraw);
            i.putExtras(counters);
            startActivityForResult(i, RESULT_OK);
            return true;
        case R.id.menu_reset:




//-- Data being passed from "Options" --
protected void onActivityResult(int requestCode, int resultCode, Intent i){
    Bundle counts = i.getExtras();
    if (resultCode == RESULT_OK) {
        Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();

        plWin = counts.getInt("Win", 100);
        plLoss = counts.getInt("Loss", 100);
        plDraw = counts.getInt("Draw", 100);
    }
}
}
}
//-- Data being passed back to "Main" -- 
public void onBackPressed() {
    Bundle counters = new Bundle();
    Intent i = new Intent();
    counters.putInt("Win", wins);
    counters.putInt("Loss", losses);
    counters.putInt("Draw", draws);
    i.putExtras(counters);
    setResult(RESULT_OK, i);
    finish();
}
}

第二项活动:

//-- Handle item selection
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            Intent i = new Intent(this, Options.class);
            Bundle counters = new Bundle();
            counters.putInt("plWin", plWin);
            counters.putInt("plLoss", plLoss);
            counters.putInt("plDraw", plDraw);
            i.putExtras(counters);
            startActivityForResult(i, RESULT_OK);
            return true;
        case R.id.menu_reset:




//-- Data being passed from "Options" --
protected void onActivityResult(int requestCode, int resultCode, Intent i){
    Bundle counts = i.getExtras();
    if (resultCode == RESULT_OK) {
        Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();

        plWin = counts.getInt("Win", 100);
        plLoss = counts.getInt("Loss", 100);
        plDraw = counts.getInt("Draw", 100);
    }
}
}
}
//-- Data being passed back to "Main" -- 
public void onBackPressed() {
    Bundle counters = new Bundle();
    Intent i = new Intent();
    counters.putInt("Win", wins);
    counters.putInt("Loss", losses);
    counters.putInt("Draw", draws);
    i.putExtras(counters);
    setResult(RESULT_OK, i);
    finish();
}
}
将代码更改为:

Bundle counts = data.getExtras();
if (resultCode == RESULT_OK) {  
    plWin = counts.getInt("Win");
    plLoss = counts.getInt("Loss");
    plDraw = counts.getInt("Draw");
}
在本例中,getIntent()返回启动第一个活动的意图。调用方活动,所以没有关于从第二个活动返回数据的内容

UPD: 我还想强调第二个活动中的
onBackPressed()
实现非常奇怪。它调用的是
super.onBackPressed()
,默认设置为“取消”结果,因此不能保证您的结果是真正的返回值

我建议更改以下代码:

public void onBackPressed() {
    Bundle counters = new Bundle();
    Intent i = new Intent();
    counters.putInt("Win", wins);
    counters.putInt("Loss", losses);
    counters.putInt("Draw", draws);
    i.putExtras(counters);
    setResult(RESULT_OK, i);
    finish();
}
请告诉我们它是否有用。

尝试使用此功能

plWin=data.getIntExtra("Win",0);
plLoss=data.getIntExtra("Loss",0);
plDraw=data.getIntExtra("Draw",0);
并检查这些值是否返回零,这意味着从活动传递额外的或包时出现问题


如果有任何类似的情况,请通过代码处理,但我认为这些函数不会通过任何异常。

您的错误是位于您正在编写resultcode的请求代码位置(RESULT\u OK)

我建议做一个这样的静态变量

public static final int REQUEST_SECOND=100;
然后像这样通过它

statrtActivityForResult(i,REQUEST_SECOND);
然后在第二个活动中,也为结果设置一个静态变量

public static final int MY_RESULT=101;
并调用第二个活动

setResult(MY_RESULT);
然后在ActivityResult上这样写:

protected void onActivityResult(int requestCode, int resultCode, Intent i){

if(requestcod==REQUEST_SECOND){


    Bundle counts = i.getExtras();
    if (resultCode == MY_RESULT) {
        Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();

        plWin = counts.getInt("Win", 100);
        plLoss = counts.getInt("Loss", 100);
        plDraw = counts.getInt("Draw", 100);
    }
}
}

我的“startActivityForResult”中有“RESULT\u OK”,而不是int

将其从OP中显示的内容更改为:

startActivityForResult(i, 100);
修好了


感谢大家的贡献

我已经盯着这个看了差不多两天了,但没看到。非常感谢你。啊,胡说八道。现在“Bundle counts=data.getExtras();”正在抛出一个异常OK,修复了空点异常。但我回到了原始问题,它并没有覆盖原始变量。编辑我的原始问题以合并更改请查看更新的答案。如果没有帮助,我将要求您粘贴第一个活动的onCreate()或其他方法,其中plWin变量为changedUPD:进行了您建议的更改。它没有伤害任何东西,但也没有改变结果。好吧。。。我已经粘贴了这两项活动的全部内容。。。非常感谢你的帮助。plWin、plLoss和plDraw都是关于第一个活动的onCreate方法定义的没有例外。。。我有种感觉,它根本就没有给他们打电话。我这样做了,但是我使用了“100”而不是“0”,并且没有得到任何一个来支持我以前的声明。我在onActivityResult if方法下插入了一个吐司,但它没有按照AlexN的要求激活,我已经更改了操作。。。将两者全部粘贴在一起activites@WizardKnight接受答案,如果你的问题得到解决,我最近发布了完整的coe,它也将帮助其他人。