我正在尝试制作一个蓝牙应用程序,我正在关注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)
答案 0 :(得分:1)
我无法看到mBluetoothAdapter的声明在哪里,但根据异常堆栈它似乎是null,所以它试图在null对象上调用方法getRemoteDevice()。