我的代码有关后退按钮的问题。我在这个网站上尝试了很多答案。 我有mainActivity用startActivityforResult调用第二个活动。第二个活动启动蓝牙并显示已绑定设备的列表,但如果我按下后退按钮,它会停止应用程序并显示错误。
public class Main extends Activity implements OnSeekBarChangeListener{
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String address = data.getExtras().getString(BondedDevices.DEVICE_ADDRESS);
if (resultCode==Activity.RESULT_CANCELED){
Toast.makeText(getApplicationContext(), "Finalizando dispositivos pareados", Toast.LENGTH_SHORT).show();
return;
}
switch (requestCode) {
case DISPOSITIVOS_PAREADOS:
if(resultCode==Activity.RESULT_OK){
mConnectThread = new ConnectThread(address);
mConnectThread.start();
estado = EST_CONECTADO; //informa que esta conectado
atualizaEstado();
break;
}
return;
}
}
但是当我进入第二个活动,并尝试回到主要活动只需按下后退按钮时,我在主要活动上收到错误,我的应用程序返回错误:
public class BondedDevices extends ListActivity {
....
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if(D) Log.e(TAG, "+++ ON BACK PRESSED +++");
setResult(Activity.RESULT_CANCELED);
this.finish();
}
或者像这样:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
return true;
}
}
return false;
}
我尝试了很多不同的代码,但它仍然无效。请有人帮助我。谢谢。
答案 0 :(得分:1)
你应该致电super.onBackPressed();
@Override
public void onBackPressed() {
super.onBackPressed();
if(D) Log.e(TAG, "+++ ON BACK PRESSED +++");
setResult(Activity.RESULT_CANCELED);
this.finish();
}
答案 1 :(得分:0)
当你从第二个Activity
返回时,你没有在后退按钮的情况下设置Intent
作为结果的数据,但在检查{{{0}的值之前你做的第一件事就是1}} resultCode
尝试从RESULT_CANCELED
获取地址,该地址为空,因此这将导致Intent
。
您需要对NullPointerException
中的行重新排序,使其看起来更像这样:
onActivityResult()
此外,您不应该同时覆盖if (resultCode==Activity.RESULT_CANCELED){
Toast.makeText(getApplicationContext(), "Finalizando dispositivos pareados", Toast.LENGTH_SHORT).show();
return;
}
//Do this after checking for cancel
String address = data.getExtras().getString(BondedDevices.DEVICE_ADDRESS);
/* The rest of the existing code */
和onBackPressed()
,并坚持使用其中之一。您只是首先会混淆首先调用哪个代码路径。即使在结果设置为空白onKeyDown()
的情况下,您仍会在现有代码中获得Intent
,因为NullPointerException
的额外包仍然为空。