【问题标题】:java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activityjava.lang.RuntimeException:将结果 ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} 传递给活动失败
【发布时间】:2016-04-05 09:37:41
【问题描述】:

我正在尝试制作蓝牙应用程序,并且我正在遵循 developer.android 中的“指南”,但是每当我尝试 getRemoteDevice 时,我的应用程序就会崩溃。一定有什么问题,但我就是想不通。

TribotActivity(onActivityResult 类)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_DEVICE_ADDRESS) {        // Check which request we're responding to. When doing more requests a switch case is probably a nicer way of doing this.
        if (resultCode == RESULT_OK) {
            connectDevice(data, true);// Make sure the request was successful
        } else {
            Toast.makeText(getApplicationContext(), "Failed to get MAC address from ", Toast.LENGTH_SHORT).show();    //TODO Remove this when we've successfully sent through the address
        }
    }
}

private void connectDevice(Intent data, boolean secure) {
    // Get the device MAC address
    String address = data.getExtras()
            .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
    // Get the BluetoothDevice object
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
    // Attempt to connect to the device
    mConnect.connect(device, secure);
}

DeviceListActivity

public static String EXTRA_DEVICE_ADDRESS = "device_address";

private AdapterView.OnItemClickListener mDeviceClickListener = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
        // Cancel discovery because it's costly and we're about to connect
        mBtAdapter.cancelDiscovery();

        // Get the device MAC address, which is the last 17 chars in the View
        String info = ((TextView) v).getText().toString();
        String address = info.substring(info.length() - 17);

        // Create the result Intent and include the MAC address
        Intent data = new Intent();
        data.putExtra(EXTRA_DEVICE_ADDRESS, address);

        // Set result and finish(=close?) this Activity
        setResult(RESULT_OK, data);
        finish();
    }
};

我敢打赌,设备不会以某种方式发送到 TribotActivity。 这是我的 logcat :)

Logcat

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.hszuyd.noodle_.testing/com.hszuyd.noodle_.testing.TribotActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.bluetooth.BluetoothDevice android.bluetooth.BluetoothAdapter.getRemoteDevice(java.lang.String)' on a null object reference
                                                                            at android.app.ActivityThread.deliverResults(ActivityThread.java:3733)
                                                                            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
                                                                            at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:148)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5461)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117)
                                                                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.bluetooth.BluetoothDevice android.bluetooth.BluetoothAdapter.getRemoteDevice(java.lang.String)' on a null object reference
                                                                            at com.hszuyd.noodle_.testing.TribotActivity.connectDevice(TribotActivity.java:93)
                                                                            at com.hszuyd.noodle_.testing.TribotActivity.onActivityResult(TribotActivity.java:71)
                                                                            at android.app.Activity.dispatchActivityResult(Activity.java:6456)
                                                                            at android.app.ActivityThread.deliverResults(ActivityThread.java:3729)
                                                                            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776) 
                                                                            at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                            at android.os.Looper.loop(Looper.java:148) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5461) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:117) 

【问题讨论】:

    标签: java android bluetooth runtimeexception


    【解决方案1】:

    我看不到 mBluetoothAdapter 的声明在哪里,但根据异常堆栈,它似乎为 null,因此它试图在 null 对象上调用方法 getRemoteDevice()。

    【讨论】:

    • 私有蓝牙适配器 mBluetoothAdapter;在 TribotActivity
    • 我认为你必须调用 BluetoothAdapter.getDefaultAdapter();在声明中为 mBluetoothAdapter 设置一个非空值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多