后退按钮错误,动作下来

时间:2013-01-24 00:50:14

标签: android android-button

我的代码有关后退按钮的问题。我在这个网站上尝试了很多答案。 我有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; 
    }

我尝试了很多不同的代码,但它仍然无效。请有人帮助我。谢谢。

2 个答案:

答案 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的额外包仍然为空。