Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 后退按钮错误,操作停止_Android_Android Button - Fatal编程技术网

Android 后退按钮错误,操作停止

Android 后退按钮错误,操作停止,android,android-button,Android,Android Button,我的返回按钮代码有问题。我在这个网站上尝试了很多答案。 我有一个main活动,它使用startActivityforResult调用第二个活动。第二个活动启动bluetooth并显示绑定设备的列表,但如果我按下backbutton按钮,则会导致应用程序停止并出现错误 public class Main extends Activity implements OnSeekBarChangeListener{ ... @Override protected void onActivityR

我的返回按钮代码有问题。我在这个网站上尝试了很多答案。 我有一个main活动,它使用startActivityforResult调用第二个活动。第二个活动启动bluetooth并显示绑定设备的列表,但如果我按下backbutton按钮,则会导致应用程序停止并出现错误

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; 
    }
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 */

我尝试了很多不同的代码,但仍然不起作用。请有人帮帮我。谢谢。

您应该调用
super.onBackPressed()

像这样

@Override
public void onBackPressed() {
    super.onBackPressed();
    if(D) Log.e(TAG, "+++ ON BACK PRESSED +++");
    setResult(Activity.RESULT_CANCELED);
    this.finish();
}

当您从第二个
活动返回时,您没有在后退按钮框中将
意图设置为结果数据,但是在检查
结果的
结果代码
值之前,您要做的第一件事是尝试从
意图中获取地址,这将导致出现
NullPointerException

您需要对onActivityResult()中的
行重新排序,使其看起来更像这样:

@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; 
    }
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
,因为该
Intent
的附加包仍然为空