Stella
Stella

Reputation: 1866

Android: Socket not connecting and throws exception

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

Answers (1)

Dario
Dario

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

Related Questions