2013-07-23 24 views
0

我在執行修改後的BluetoothChat應用程序時遇到此問題。該應用程序顯示設備,開始連接到它,然後崩潰。我一直在測試這個,它發生在這個線程上。BluetoothChat ConnectedThread崩潰

下面是代碼和logcat的:

public class ConnectedThread extends Thread { 
// Debugging 
private static final String TAG = "BluetoothChatService"; 
private static final boolean D = true; 

public ConnectedThread(BluetoothSocket socket) { 
    Log.d(TAG, "create ConnectedThread"); 
    GlobalVar.mmSocket = socket; 
    InputStream tmpIn = null; 
    OutputStream tmpOut = null; 

    /**Get the input and output streams, using temp objects because member streams are final*/ 
    try { 
     tmpIn = socket.getInputStream(); 
     tmpOut = socket.getOutputStream(); 
    } catch (IOException e) {Log.e(TAG, "temp sockets not created", e); } 

    GlobalVar.mmInStream = tmpIn; 
    GlobalVar.mmOutStream = tmpOut; 
} 

@Override 
public void run() { 
    Log.i(TAG, "BEGIN mConnectedThread"); 
    byte[] buffer = new byte[1024]; // buffer store for the stream 
    int bytes; // bytes returned from read() 

    /**Keep listening to the InputStream until an exception occurs*/ 
    while (true) { 
     try { 
      if (D) Log.d(TAG, "starting"); 
      /**Read from the InputStream*/ 
      bytes = GlobalVar.mmInStream.read(buffer); 

      /**Send the obtained bytes to the UI activity*/ 
      GlobalVar.mHandler.obtainMessage(GlobalVar.MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 
     } catch (IOException e) { 
      Log.e(TAG, "disconnected", e); 
      GlobalVar.mTransmission.connectionLost(); 

      /**Start the service over to restart listening mode*/ 
      if (D) Log.d(TAG, "arrives"); 
      ConnectedThread.this.start(); //This could be wrong! 
      break; 
     } 
    } 
} 


/** 
* Write to the connected OutStream. 
* @param buffer The bytes to write 
*/ 
public void write(byte[] buffer) { 
    try { 
     GlobalVar.mmOutStream.write(buffer); 

     /**Share the sent message back to the UI Activity*/ 
     GlobalVar.mHandler.obtainMessage(GlobalVar.MESSAGE_WRITE, -1, -1, buffer).sendToTarget(); 

    } catch (IOException e) {} 
} 


/**Call this from the main activity to shutdown the connection*/ 
public void cancel() { 
    try { 
     GlobalVar.mmSocket.close(); 
    } catch (IOException e) { } 
} 

}

/這是logcat的,其中可以看出,在雖然進入,然後崩潰。

07-23 12:22:55.560: D/AbsListView(27386): unregisterIRListener() is called 
07-23 12:22:55.590: D/BluetoothUtils(27386): isSocketAllowedBySecurityPolicy start : device null 
07-23 12:22:55.590: W/BluetoothAdapter(27386): getBluetoothService() called with no BluetoothManagerCallback 
07-23 12:22:55.600: E/SpannableStringBuilder(27386): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
07-23 12:22:55.600: E/SpannableStringBuilder(27386): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
07-23 12:22:55.620: D/AbsListView(27386): onDetachedFromWindow 
07-23 12:22:55.620: D/AbsListView(27386): unregisterIRListener() is called 
07-23 12:22:55.620: D/AbsListView(27386): onDetachedFromWindow 
07-23 12:22:55.620: D/AbsListView(27386): unregisterIRListener() is called 
07-23 12:22:57.032: D/BluetoothChatService(27386): create ConnectedThread 
07-23 12:22:57.052: D/AndroidRuntime(27386): Shutting down VM 
07-23 12:22:57.052: I/BluetoothChatService(27386): BEGIN mConnectedThread 
07-23 12:22:57.052: D/BluetoothChatService(27386): starting 
07-23 12:22:57.052: W/dalvikvm(27386): threadid=1: thread exiting with uncaught exception (group=0x41d58ac8) 
07-23 12:22:57.052: E/AndroidRuntime(27386): FATAL EXCEPTION: main 
07-23 12:22:57.052: E/AndroidRuntime(27386): java.lang.NullPointerException 
07-23 12:22:57.052: E/AndroidRuntime(27386): at com.example.btaplication.BTActivity$1.handleMessage(BTActivity.java:289) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at android.os.Looper.loop(Looper.java:137) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at android.app.ActivityThread.main(ActivityThread.java:5328) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at java.lang.reflect.Method.invoke(Method.java:511) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
07-23 12:22:57.052: E/AndroidRuntime(27386): at dalvik.system.NativeStart.main(Native Method) 
07-23 12:28:07.475: I/Process(27386): Sending signal. PID: 27386 SIG: 9 

回答

2

對不起,但我是新來的機器人,我不知道在哪裏看到至極值有null。在289行中,如果獲得了Handler函數,並且正好在以下這行中:GlobalVar.mConversationArrayAdapter.clear();我已經在這條線上設置了一個缺點,我意識到這是品質問題,因爲你說,但我不知道如何解決。

所以mConversationArrayAdapter似乎沒有定義。在BluetoothChat示例代碼,有:

 mConversationArrayAdapter = new ArrayAdapter<String>(this, R.layout.message); 

我想你的活動BTActivity試圖使用BluetoothChat組件(你不應該在這種情況下)。

+0

是的,我已經定義了BTCommunication中的arraydapter,所以我必須在BTActivity中獲得這個聲明。另一方面,當我看到一些日誌文件被debbug啓動時,該應用程序使用藍牙聊天軟件進行配置。我該如何解決這個問題? – masmic

+0

爲什麼你的lanzarComunicacion方法需要一個未被使用的View?此外,BTC通信是另一項活動,因此未定義mConversationArrayAdapter,這就是爲什麼您會收到第289行的NPE例外 –

+0

在主要活動中定義並完美工作。謝謝! – masmic

1

12月7日至23日:22:57.052:E/AndroidRuntime(27386): 顯示java.lang.NullPointerException 12月7日至23日:22:57.052: E/AndroidRuntime(27386):在 com.example.btaplication.BTActivity $ 1.handleMessage(BTActivity.java:289)

您必須檢查BTActivity行289行。

在那裏放置一個斷點並從調試器開始。 你會看到哪個值爲空。比將容易解決。

請更新問題並標記該行。

希望它有幫助!

+0

對不起,但我是新來的android和我不知道在哪裏看到極值有null。在289行中,如果得到Handler函數,並且正好在這一行中,如下所示:'GlobalVar.mConversationArrayAdapter.clear();'我已經在這條線上設置了一個缺省點,並且我意識到這是品脫在哪裏問題正如你所說,但我不知道如何解決。 – masmic

+0

告訴我們代碼的一部分!全局變量不是一個好的設計在Android中,你會經常遇到這個問題 – 2013-07-23 11:23:55

+0

在這裏我貼第一個代碼:[link](http://stackoverflow.com/questions/17806069/bluetoothchat-like-app-not-communicating ) – masmic