誰能告訴我爲什麼我在handleMessage
Android的處理程序的handleMessage
回答
讓網絡上的主線程異常,因爲你在主線程和在其上創建工作處理程序的實例。在heandler中,你嘗試在主線程中創建套接字連接(internet連接)。
/**
* Default constructor associates this handler with the {@link Looper} for the
* current thread.
*
* If this thread does not have a looper, this handler won't be able to receive messages
* so an exception is thrown.
*/
public Handler() ;
我猜你所遇到的例外,由於Toast.makeText(getApplicationContext(), count, Toast.LENGTH_LONG).show();
嘗試使用一個新的線程:
runOnUiThread(new Runnable() {
@Override
public void run() {
showToast(MessageBuilder.SUCCESSFUL_COMMENT);
}
});
您需要在後臺運行您的處理程序。您可以使用Looper
。 請參閱https://developer.android.com/reference/android/os/Looper.html。
你可以試試這個:
Thread thread = new Thread() {
@Override
public void run() {
super.run();
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
try {
String tmp = msg.obj.toString();
InetAddress serverAddr = InetAddress.getByName(serverIP);
socket = new Socket(serverAddr, serverPort);
OutputStream outStream = socket.getOutputStream();
PrintWriter writer = new PrintWriter(outStream);
writer.write(tmp);
writer.flush();
InputStream inStream = socket.getInputStream();
byte[] xxx = new byte[20];
int count = inStream.read(xxx);
// Toast.makeText(getApplicationContext(), count, Toast.LENGTH_LONG).show();
outStream.flush();
outStream.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
Looper.myLooper().quit();
}
}
};
handler.removeCallbacks(this);
Looper.loop();
}
};
thread.start();
你也都出現在你的處理程序Toast
這將導致RuntimeError。請從處理程序中刪除Toast。
好的,它應該是什麼樣子?你能告訴我這是基於我的代碼嗎? – SimpleCoder
我試圖解決這個問題,但我總是有'網絡主線程異常'由Inputstream – SimpleCoder
@SimpleCoder引起我已經更新了答案,請檢查。 –
- 1. Android處理程序handleMessage()方法調用
- 2. 線程和處理程序handleMessage()性能
- 3. JAX-WS處理程序 - handleMessage未運行
- 4. Android的線程,處理程序的handleMessage:從運行的線程更新內外部類文件UI線程
- 5. Android中的處理程序
- 6. Android中的處理程序
- 7. 整理不同的處理程序android
- 8. 未處理Android處理程序操作
- 9. 處理程序的Android編程
- 10. 活動的Android處理程序/線程
- 11. Android中的處理程序和線程
- 12. Touchevent中的android線程/處理程序
- 13. Android處理程序泄漏
- 14. Android處理程序背景
- 15. android:停止處理程序
- 16. TextToSpeech在android處理程序
- 17. Android處理程序問題
- 18. 使用處理程序Android
- 19. 的Android SAX解析器處理程序
- 20. NullPointerException異常處理程序的Android
- 21. Android中的藍牙處理程序
- 22. java NullPointerException Android的處理程序
- 23. 處理程序凍結GUI的Android
- 24. Android,處理程序的錯誤
- 25. 的Android按鈕單擊處理程序
- 26. Android的處理程序定義語法
- 27. Android中的UI處理程序
- 28. 處理程序行爲的Android
- 29. Android中處理程序的代碼
- 30. Android ListView的點擊處理程序
嘗試使用AsyncTasks,它更容易,更清潔。 –
也許它是,但問題是如果我在'AsyncTask'的'doInbackground'中使用'onPictureTaken'我得到'onPictureTaken'同樣的錯誤 – SimpleCoder
你能分享logcat日誌嗎? –