从 sub activity 返回的结果代码不正确
the result code returned from sub activity is not OK
我有一个 activity 启动子 activity 的结果。当 sub activity 启动时,在其 finish()
方法中,我将一些数据添加到包中 bunConnAssets
然后将此包添加到意图 intConnAssets
,最后调用 setResult(RESULT_OK, intConnAssets);
问题是,在运行时,当我关闭子activity,因此它的finish()
方法被调用时,mainActivity中的onActivityResult
是被调用但是里面的 switch-case
没有被调用。但是
else {
Log.d(TAG, "resultCode != RESULT_OK");
}
被调用意味着从 subActivity 返回的 resutCode 不正确
为什么会这样?
子活动:
@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
Log.w(TAG, "@finish().");
if (this.mqttSettingsDB != null) {
Log.d(TAG, "this.mqttSettingsDB is not null.");
int[] id = this.mqttSettingsDB.getIDs();
Bundle bunConnAssets = new Bundle();
Intent intConnAssets = new Intent();
....
....
....
intConnAssets.putExtras(bunConnAssets);
setResult(RESULT_OK, intConnAssets);
} else {
Log.wtf(TAG, "this.mqttSettingsDB is null.");
}
}
onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult");
switch (requestCode) {
case REQUEST_CODE:
if (resultCode == RESULT_OK) {
if (data != null) {
if (data.hasExtra("bunConnAssets")) {
Log.d(TAG, "Bundle exists");
} else {
Log.d(TAG, "Bundle does not exist");
}
}
} else {
Log.d(TAG, "resultCode != RESULT_OK");
}
break;
default:
Log.e(TAG, "Unexpected RequestCode.");
break;
}
}
你在第一行调用了super.finish()
,所以后面的代码可能不会执行。
在代码末尾调用 super 方法。
试试下面的代码
@Override
public void finish() {
Log.w(TAG, "@finish().");
if (this.mqttSettingsDB != null) {
Log.d(TAG, "this.mqttSettingsDB is not null.");
int[] id = this.mqttSettingsDB.getIDs();
Bundle bunConnAssets = new Bundle();
Intent intConnAssets = new Intent();
....
....
....
intConnAssets.putExtras(bunConnAssets);
setResult(RESULT_OK, intConnAssets);
} else {
Log.wtf(TAG, "this.mqttSettingsDB is null.");
}
super.finish();
}
我有一个 activity 启动子 activity 的结果。当 sub activity 启动时,在其 finish()
方法中,我将一些数据添加到包中 bunConnAssets
然后将此包添加到意图 intConnAssets
,最后调用 setResult(RESULT_OK, intConnAssets);
问题是,在运行时,当我关闭子activity,因此它的finish()
方法被调用时,mainActivity中的onActivityResult
是被调用但是里面的 switch-case
没有被调用。但是
else {
Log.d(TAG, "resultCode != RESULT_OK");
}
被调用意味着从 subActivity 返回的 resutCode 不正确
为什么会这样?
子活动:
@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
Log.w(TAG, "@finish().");
if (this.mqttSettingsDB != null) {
Log.d(TAG, "this.mqttSettingsDB is not null.");
int[] id = this.mqttSettingsDB.getIDs();
Bundle bunConnAssets = new Bundle();
Intent intConnAssets = new Intent();
....
....
....
intConnAssets.putExtras(bunConnAssets);
setResult(RESULT_OK, intConnAssets);
} else {
Log.wtf(TAG, "this.mqttSettingsDB is null.");
}
}
onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult");
switch (requestCode) {
case REQUEST_CODE:
if (resultCode == RESULT_OK) {
if (data != null) {
if (data.hasExtra("bunConnAssets")) {
Log.d(TAG, "Bundle exists");
} else {
Log.d(TAG, "Bundle does not exist");
}
}
} else {
Log.d(TAG, "resultCode != RESULT_OK");
}
break;
default:
Log.e(TAG, "Unexpected RequestCode.");
break;
}
}
你在第一行调用了super.finish()
,所以后面的代码可能不会执行。
在代码末尾调用 super 方法。
试试下面的代码
@Override
public void finish() {
Log.w(TAG, "@finish().");
if (this.mqttSettingsDB != null) {
Log.d(TAG, "this.mqttSettingsDB is not null.");
int[] id = this.mqttSettingsDB.getIDs();
Bundle bunConnAssets = new Bundle();
Intent intConnAssets = new Intent();
....
....
....
intConnAssets.putExtras(bunConnAssets);
setResult(RESULT_OK, intConnAssets);
} else {
Log.wtf(TAG, "this.mqttSettingsDB is null.");
}
super.finish();
}