Reputation: 1866
I am having the following Android code which connects with a web socket program. Web Socket is running on as Java application. Both socket and android code is in Eclipse.
The problem is, Android program is not connecting this socket at all. It is handled under button click as mentioned in the code below. After this line socket = new Socket("192.168.1.21", 8081);
it is throwing to exception, not sure why. I tried to refer all sample code from internet, but i couldn't see any strange issue in the below code.
Could someone please help me on solving this please?
Android code:
mHandler = new Handler();
clientthread = new ClientThread();
Button connectBtn = (Button) findViewById(R.id.button2);
connectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Start contacting Socket
mHandler.post(mUpdate);
}
});
private Runnable mUpdate = new Runnable() {
public void run() {
try {
clientthread.run();
pw = new PrintWriter(socket.getOutputStream(), true);
EditText randTxtField = (EditText) findViewById(R.id.editText1);
pw.println(randTxtField.getText().toString());
pw.flush();
}
catch (Exception ex) {
ex.printStackTrace();
}
// Read randrom ID returned by Socket
BufferedReader socketReader;
try {
socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
msgStr = socketReader.readLine();
Log.d("msgStr: ", msgStr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
class ClientThread implements Runnable {
@Override
public void run()
{
try {
// Exception throw when executing this line itself...
socket = new Socket("192.168.1.21", 8081);
}
catch (UnknownHostException e1) {
e1.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
}
}
Exception:
03-24 14:51:54.672: D/dalvikvm(21673): GC_FOR_ALLOC freed 295K, 4% free 9800K/10128K, paused 19ms, total 20ms
03-24 14:54:19.974: D/socketServerIP(21673): 192.168.1.21
03-24 14:54:19.984: W/System.err(21673): android.os.NetworkOnMainThreadException
03-24 14:54:19.984: W/System.err(21673): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
03-24 14:54:19.984: W/System.err(21673): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
03-24 14:54:19.984: W/System.err(21673): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-24 14:54:19.984: W/System.err(21673): at libcore.io.IoBridge.connect(IoBridge.java:112)
03-24 14:54:19.984: W/System.err(21673): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-24 14:54:19.984: W/System.err(21673): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-24 14:54:19.984: W/System.err(21673): at java.net.Socket.startupSocket(Socket.java:567)
03-24 14:54:19.984: W/System.err(21673): at java.net.Socket.<init>(Socket.java:226)
03-24 14:54:19.984: W/System.err(21673): at com.example.cobrowseandroid.RandomIDActivity$ClientThread.run(RandomIDActivity.java:262)
03-24 14:54:19.984: W/System.err(21673): at com.example.cobrowseandroid.RandomIDActivity$1.run(RandomIDActivity.java:152)
03-24 14:54:19.984: W/System.err(21673): at android.os.Handler.handleCallback(Handler.java:733)
03-24 14:54:19.984: W/System.err(21673): at android.os.Handler.dispatchMessage(Handler.java:95)
03-24 14:54:19.984: W/System.err(21673): at android.os.Looper.loop(Looper.java:136)
03-24 14:54:19.984: W/System.err(21673): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-24 14:54:19.984: W/System.err(21673): at java.lang.reflect.Method.invokeNative(Native Method)
03-24 14:54:19.984: W/System.err(21673): at java.lang.reflect.Method.invoke(Method.java:515)
03-24 14:54:19.984: W/System.err(21673): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-24 14:54:19.984: W/System.err(21673): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-24 14:54:19.984: W/System.err(21673): at dalvik.system.NativeStart.main(Native Method)
03-24 14:54:19.984: D/AndroidRuntime(21673): Shutting down VM
03-24 14:54:19.984: W/dalvikvm(21673): threadid=1: thread exiting with uncaught exception (group=0x415efba8)
03-24 14:54:19.984: E/AndroidRuntime(21673): FATAL EXCEPTION: main
03-24 14:54:19.984: E/AndroidRuntime(21673): Process: com.example.cobrowseandroid, PID: 21673
03-24 14:54:19.984: E/AndroidRuntime(21673): java.lang.NullPointerException
03-24 14:54:19.984: E/AndroidRuntime(21673): at com.example.cobrowseandroid.RandomIDActivity$1.run(RandomIDActivity.java:179)
03-24 14:54:19.984: E/AndroidRuntime(21673): at android.os.Handler.handleCallback(Handler.java:733)
03-24 14:54:19.984: E/AndroidRuntime(21673): at android.os.Handler.dispatchMessage(Handler.java:95)
03-24 14:54:19.984: E/AndroidRuntime(21673): at android.os.Looper.loop(Looper.java:136)
03-24 14:54:19.984: E/AndroidRuntime(21673): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-24 14:54:19.984: E/AndroidRuntime(21673): at java.lang.reflect.Method.invokeNative(Native Method)
03-24 14:54:19.984: E/AndroidRuntime(21673): at java.lang.reflect.Method.invoke(Method.java:515)
03-24 14:54:19.984: E/AndroidRuntime(21673): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-24 14:54:19.984: E/AndroidRuntime(21673): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-24 14:54:19.984: E/AndroidRuntime(21673): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 0
Views: 175
Reputation: 2073
You should not invoke network stuff on UI thread.
you are calling
mHandler.post(mUpdate)
which runs in current thread (UI thread) method "run". use for e.g. instead:
Thread t = new Thread(mUpdate);
t.start();
to run network code in separated thread...
Also then don't forget to call UI related code in UI thread (for e.g. getActivity().runOnUiThread()).
Upvotes: 1