I have to send/receive information from a server. I've created a thread (TcpClient is its name) which connects to the server, and it works fine. Now I have to send a simple request to server, and it could send me an answers in the same moment or after 100 seconds. I've implemented it:
public void request(String s)
{
int id = Integer.parseInt(s);
PrintWriter out = null;
try
{
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
}
catch (IOException e)
{
e.printStackTrace();
}
out.print("POSREQ "+id);
out.flush();
//read part
StringBuilder reader = new StringBuilder();
byte[] bytes = new byte[1000];
int numRead = 0;
try
{
socket.setSoTimeout(70*1000);
if ((numRead = socket.getInputStream().read(bytes)) >= 0)
{
reader.append(new String(bytes, 0, numRead));
}
Log.d("tag:",reader.toString());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
in the Thread class. But when I push the button, the application is stopped. What is the problem? I have to make it in other thread or asynctask? Or in a service? Because I've thought to use an asynctask but I have to wait about 100 seconds... This is the logcat:
03-13 09:29:30.018 2024-2122/? E/FaceDetectionService﹕ handleMessage: { what=3 when=0 } 03-13 09:29:30.959 1691-11818/? E/ShotSingle﹕ faceDetect E 03-13 09:29:30.969 2024-2123/? E/FaceDetectionService﹕ onFaceDetection: 0 03-13 09:29:30.969 2024-2063/? E/FaceDetectionService﹕ DONE! 03-13 09:29:30.969 2024-2063/? E/FaceDetectionService﹕ WAIT FOR CALLBACK 03-13 09:29:31.570 2024-2063/? E/FaceDetectionService﹕ No Callback! 03-13 09:29:32.170 2024-2063/? E/FaceDetectionService﹕ No Callback! 03-13 09:29:32.170 2024-2063/? E/FaceDetectionService﹕ DONE! BlinkCount: 0 Retry: 2 03-13 09:29:32.170 2024-2063/? E/FaceDetectionService﹕ Wait for 2 03-13 09:29:32.170 2024-2122/? E/FaceDetectionService﹕ handleMessage: { what=2 when=0 } 03-13 09:29:32.671 1691-11818/? E/ShotSingle﹕ faceDetect X 03-13 09:29:32.681 2024-2063/? E/FaceDetectionService﹕ DONE! 03-13 09:29:32.681 2024-2063/? E/FaceDetectionService﹕ disabled 03-13 09:29:32.681 2024-2063/? E/FaceDetectionService﹕ Wait for 0 03-13 09:29:32.681 2024-2123/? E/FaceDetectionService﹕ onFaceDetection: 0 03-13 09:29:32.681 2024-2122/? E/FaceDetectionService﹕ handleMessage: { what=0 when=-1ms } 03-13 09:29:32.941 2024-2122/? E/FaceDetectionService﹕ handleMessage signal: 0 03-13 09:29:32.941 2024-2063/? E/FaceDetectionService﹕ DONE! 03-13 09:29:33.782 11737-11737/? E/AndroidRuntime﹕ FATAL EXCEPTION: main android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163) at libcore.io.IoBridge.recvfrom(IoBridge.java:513) at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) at java.io.InputStream.read(InputStream.java:163) at com.example.stefano_pc.tabs.Connection$TCPClient.request(Connection.java:189) at com.example.stefano_pc.tabs.Connection$2.onClick(Connection.java:88) at android.view.View.performClick(View.java:4162) at android.view.View$PerformClick.run(View.java:17082) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4867) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(Native Method) 03-13 09:29:33.862 2024-2043/? E/android.os.Debug﹕ !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error 03-13 09:29:40.578 2024-2230/? E/Watchdog﹕ !@Sync 4219
Thank you for your answers.