내가 handleMessage
안드로이드 핸들러 handleMessage
답변
에서 메인 스레드 예외에 네트워크를 얻고있는 이유는 메인 스레드에서 그것에 작업에 핸들러의 인스턴스를 생성하기 때문에 누군가가 나에게 할 수 있습니다. 그리고 heandler에서는 소켓 연결 (인터넷 연결)을 주 스레드에서 만들려고합니다.
/**
* 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();
은 또한 당신이 RuntimeError에 원인이됩니다 핸들러에
Toast
을 보이고있다. 처리기에서 토스트를 꺼내십시오.
오케이, 어떻게 생겼을 까? 내 코드에 따라 이걸 보여 주시겠습니까? – SimpleCoder
나는 이걸 내 원에서 해결하려고 노력했지만, 항상 InputStream에 의한 '메인 스레드 예외에 대한 네트워크'가 있습니다. – SimpleCoder
@SimpleCoder 응답을 업데이트했습니다. 확인하십시오. –
- 1. 안드로이드 스레드, 핸들러, handleMessage : 외부 클래스 파일 내에서 실행 가능한 스레드에서 UI 스레드를 업데이트
- 2. postdelay (안드로이드)와 핸들러
- 3. 자바 안드로이드 핸들러 호출
- 4. 자바/안드로이드 - 핸들러
- 5. 안드로이드 핸들러 협회
- 6. 핸들러 스레드의 안드로이드 목적
- 7. 안드로이드 핸들러 나는 최근에 안드로이드 서비스에 관한 책에서이 코드를 발견
- 8. mHandler.obtainMessage가 handleMessage (Message msg)를 발생 시켰습니까
- 9. 스레드 및 처리기 handleMessage() 성능
- 10. 이 핸들러
- 11. 변수를 보유하는 안드로이드 데이터베이스 핸들러
- 12. 메시지 핸들러
- 13. 안드로이드 메시지 'what'코드는 핸들러 또는 스레드의 범위 내에서 고유해야합니까?
- 14. cxf MessageSenderEndingInterceptor를 재정의하고 handleMessage 메서드를 제어하는 방법
- 15. 핸들러 sendMessageDelayed가 처음에만 작동합니다.
- 16. 다중 핸들러 재사용 코드
- 17. Android 다중 핸들러 디자인
- 18. 안드로이드 키보드 입력/다음 버튼 핸들러
- 19. jQuery Mobile에서 뒤로 버튼 핸들러 (안드로이드) PhoneGap
- 20. 핸들러 클래스 및 메모리 누수
- 21. 핸들러 메시지가 중복 되었습니까?
- 22. 백그라운드 핸들러 스레드에서 백그라운드 스레드로 핸들러 전달
- 23. 핸들러
- 24. 핸들러
- 25. : 핸들러
- 26. 핸들러 메시지 내에서 축배 선언하기
- 27. android의 UI 핸들러
- 28. 글로벌 PreviewKeyDown 핸들러 대 로컬 PreviewKeyDown 핸들러
- 29. 안드로이드 처리기는 안전합니까?
- 30. JAX-WS 핸들러 - handleMessage가 실행되고 있지 않습니다.
훨씬 쉽고 깨끗한 AsyncTasks를 사용해보십시오. –
어쨌든 문제는'AsyncTask'에서'doInbackground'에서'onPictureTaken'을 사용하면'onPictureTaken'과 같은 에러가 나옵니다 – SimpleCoder
logcat 로그를 공유 할 수 있습니까? –