我试图通过手机上的Android活动与笔记本电脑上的servlet进行交互

问题描述 投票:3回答:1

我试图从手机上测试的android活动(USB)到我笔记本电脑上的Apache Tomcat7中的Servlet进行交互。我正在创建一个按钮。点击我应该去下一个“活动”。但是当我尝试在两者之间联系服务器时,它会停止响应并且不会转到下一页。如果需要这些信息,我正在使用Ubuntu作为我的笔记本电脑操作系统和OnePlus作为我的手机。

以下是Android活动的代码:

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;
    }
}

以下是我在servlet上的doPost方法。

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
    }

这就是我尝试过的:我在笔记本电脑上制作了一个本地java文件。试图与apache tomcat7联系。它可以联系并获得所需的结果。但是我的android活动无法与服务器联系。它不会将控件传递给act2 Activity。

我正处于学习阶段,所以我尽量让事情变得简单。

附加信息:如果需要,我与无线互联网,家庭网络连接。

logcat输出:

> 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

我尝试使用本地移动热点网络,将其与互联网断开连接。但它不起作用。

注意:我不是在模拟器上工作。我正在进行USB调试。

android networking usb-debugging
1个回答
3
投票

所以,通过你的机器访问本地主机,但你无法访问Android设备。

这意味着您的Android设备使用2G / 3G或WIFI连接来命中localhost。如果您使用localhost进行连接,那么您必须位于同一网络中,那么只有您可以访问localhost。

但是在模拟器中,你在同一个网络(可能是本地主机网络),这就是它工作的原因。

最后,您的方法可能的解决方案是

  1. 在Android设备中也使用相同的网络(本地主机网络)。意味着将Wifi连接到相同的本地主机互联网连接。这次2G / 3G连接不起作用,因为它们不在同一网络中
  2. 在外部部署构建一些,并访问外部IP地址以进行连接。这次2G / 3G或WIFI都能正常工作
© www.soinside.com 2019 - 2024. All rights reserved.