[英]My client code makes my android app crash
所以我有在eclipse中測試過的Client代碼,並且在這里可以正常工作
try {
// Establish connection
Socket socket = new Socket(InetAddress.getByName("192.168.1.104"), 9000);
// Request data
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
msg = "IDGN:" + "1";
System.out.println(msg);
outputStream.write(msg.getBytes());
socket.shutdownOutput();
scanner = new DataInputStream(inputStream);
restaurante = scanner.readUTF();
System.out.println(restaurante);
// Shut down socket
socket.shutdownInput();
socket.close();
} catch (IOException io) {
io.printStackTrace();
}
但是當我嘗試在我的android應用中執行相同操作時,它崩潰了
try {
// Establish connection
Socket socket = new Socket(InetAddress.getByName("192.168.1.104"), 9000);
// Request data
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
msg = "IDGN:" + "1";
outputStream.write(msg.getBytes());
socket.shutdownOutput();
scanner = new DataInputStream(inputStream);
restaurante = scanner.readUTF();
View b = findViewById(R.id.texto);
b.setVisibility(View.VISIBLE);
String ss = "Valore el servicio recibido en: " + restaurante;
((TextView) b).setText(ss);
// Shut down socket
socket.shutdownInput();
socket.close();
}catch (IOException io) {
io.printStackTrace();
}
我只是不知道為什么,我試圖使它等待數據准備就緒,將其更改為OutputStream並從掃描儀讀取一行,直接從OutputStream讀取字節。
在這兩種情況下(Android和Eclipse),服務器似乎都可以正常接收數據,並發送正確的答案。
完成后關閉或刷新輸出流。 我認為這導致應用程序內存泄漏
您不能在同一線程中同時具有網絡I / O和UI操作,例如TextView#setText()
。 嘗試在UI線程上執行網絡I / O會導致NetworkOnMainThreadException
。 嘗試在非UI線程上執行UI操作會導致CalledFromWrongThreadException
。 猜猜您的代碼在其中之一上崩潰了。
有一些高級線程機制,例如rxjava調度程序或kotlin協程。 在不添加其他庫依賴項的情況下,您可以嘗試將網絡代碼移動到AsyncTask
。
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.