2016-04-05 154 views
0

我試圖製作一個藍牙應用程序, 'm遵循developer.android的「指南」,但每當我嘗試getRemoteDevice時,我的應用程序崩潰。有些事情一定是錯的,但我無法弄清楚什麼。java.lang.RuntimeException:將結果ResultInfo {who = null,request = 1,result = -1,data = Intent {(has extras)}}傳遞給活動

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)  

回答

1

我看不出哪裏是mBluetoothAdapter的聲明,但似乎根據的異常堆棧爲空,所以它正試圖調用方法一個空對象上的getRemoteDevice()。

+0

private BluetoothAdapter mBluetoothAdapter;在TribotActivity – Remco1250

+0

我認爲你必須調用BluetoothAdapter.getDefaultAdapter();在聲明中爲了給mBluetoothAdapter設置一個非空值 – Wakachopo

相關問題