Search code examples
androidnetwork-programmingusb-debugging

I am trying to interact with a servlet on my laptop through an android activity on my phone


I am trying to interact from android activity being tested on phone(USB) to a Servlet in Apache Tomcat7 on my laptop. I am creating a button. clicking on which I should go to the next "activity". However when I try to contact the server in between, it stops responding and does not go to the next page. I am working on Ubuntu as my laptop OS and OnePlus as my phone, if there is a need for this information.

Following is the code for Android activity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_intent);

    Button submit = (Button) findViewById(R.id.button1);

    submit.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {

            new Login1().execute();
        }
    });
}

private class Login1 extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... paramss) {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        String url = "http://192.168.1.100:8080/Server1/Server";

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("u", "username"));
        params.add(new BasicNameValuePair("p", "pass"));

        HttpPost httpPost = new HttpPost(url);
       Log.i("httpPost","success");
       try {

           httpPost.setEntity(new UrlEncodedFormEntity(params));
           Log.i("setEntity", "success");
           HttpResponse httpResponse = httpClient.execute(httpPost);
           Log.i("execute", "success");

           Intent login = new Intent(getApplicationContext(), act2.class);
           startActivity(login);

        } catch (ClientProtocolException e) {
           e.printStackTrace();
           Log.i("Exception","ClientProtocolException");
       } catch (UnsupportedEncodingException e) {
           e.printStackTrace();
           Log.i("Exception", "UnsupportedEncodingException");
       } catch (IOException e) {
           e.printStackTrace();
           Log.i("Exception", "IOException");
       }

        return null;
    }
}

Following is my doPost method on the servlet.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name=request.getParameter("u").toString();  
        String password=request.getParameter("p").toString();
        response.getWriter().write(name+password); //working
    }

This is what I have tried: I made a local java file on the laptop. Tried to contact with the apache tomcat7. It can contact and get the desired result. However my android activity cannot contact with the server. It does not pass the control to the act2 Activity.

I am in the learning phase so I have tried to keep things as simple as possible.

Additional Info: I am connected with wifi internet, home network, if required .

logcat output:

> 05-22 04:42:16.368  21511-23633/com.example.bhavya.sampleintent I/httpPost﹕ success
05-22 04:42:16.369  21511-23633/com.example.bhavya.sampleintent I/setEntity﹕ success
05-22 04:43:19.575  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.100:8080 refused
05-22 04:43:19.576  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
05-22 04:43:19.576  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-22 04:43:19.576  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-22 04:43:19.576  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
05-22 04:43:19.576  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at com.example.bhavya.sampleintent.IntentAct$Login1.doInBackground(IntentAct.java:117)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at com.example.bhavya.sampleintent.IntentAct$Login1.doInBackground(IntentAct.java:99)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ Caused by: java.net.ConnectException: failed to connect to /192.168.1.100 (port 8080): connect failed: ETIMEDOUT (Connection timed out)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:124)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
05-22 04:43:19.577  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at java.net.Socket.connect(Socket.java:882)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ ... 14 more
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ Caused by: android.system.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at libcore.io.Posix.connect(Native Method)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:122)
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent W/System.err﹕ ... 19 more
05-22 04:43:19.578  21511-23633/com.example.bhavya.sampleintent I/Exception﹕ IOException

I tried with local mobile hotspot network, disconnecting it from internet. But it does not work.

Note: I am not working on emulator. I am working on USB debugging.


Solution

  • So, through your machine your accessing the local host but your not able access the same from android device.

    It means your android device your using 2G/3G or WIFI connection to hit the localhost. If you used localhost for connection that time you must be in the same network, then only you can access the localhost.

    But in emulator your in the same network (probably local host network) that's why it is working.

    Finally the possible solutions for your approach is

    1. Use the same network (local host network) in your android device also. Means connect with Wifi to same local host internet connection. This time 2G/3G connections won't work, as they are not in same network
    2. Deploy the build some where externally and access the external ip address for connection. this time both 2G/3G or WIFI will work