【问题标题】:Simple http post call not working with android app简单的http post调用不适用于android应用
【发布时间】:2013-08-02 13:34:30
【问题描述】:

我在一个 android 应用中有以下代码:

DefaultHttpClient hc=new DefaultHttpClient();
          ResponseHandler <String> res=new BasicResponseHandler();
          HttpPost postMethod=new HttpPost("http://127.0.0.1:8888/unidad6_eje1_conectarbd/ejecutaPOST"); 
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
          nameValuePairs.add(new BasicNameValuePair("value1", "Value my user entered"));
          postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
          String response=hc.execute(postMethod,res);

但它在最后一行失败了:

http://127.0.0 1: 8888/unidad6_eje1_conectarbd/ejecutaPOST 

可能已正确配置为接收 POST 请求,就像我将该 URL 放在 Web 浏览器中一样,它会给出错误:错误 405 HTTP 方法 GET 不受此 URL 支持。

servlet 的代码如下:

公共类 LoginImpl 扩展 HttpServlet {

public static String nombre="";

String clave="";

    @Override
    public void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

          String value1 = request.getParameter("value1");

          System.out.println(value1);
    }
}

我认为这不是问题。

谁能告诉我可能发生的事情?

【问题讨论】:

  • “错误 405 HTTP 方法 GET 不受此 URL 支持”似乎调用被视为 GET 调用而不是 POST,并且您的 servlet 中没有 GET 方法。
  • 首先总是测试一个网络服务,其次你的应用有使用互联网的权限吗?具有设备或仿真器网络访问权限。最后但并非最不重要的是服务器 127.0.0.1(本地主机环回)真的在您的设备或模拟器上吗?我认为不会。

标签: java android servlets post


【解决方案1】:
  1. 您无法以自己的身份通过 ip 地址 127.0.0.1 访问任何内容,因为它是环回。因此,您在模拟器或测试设备上的 android 应用永远不会通过此地址到达您主机上的应用服务器。

  2. 您是否尝试过使用正在运行您的应用程序服务器的主机的 IP 地址?

  3. 您的应用程序服务器是否接受远程连接?他在哪个界面上听?

  4. 您的 android 应用是否有权使用互联网,并且您的测试设备或模拟器网络可以访问与您的应用服务器相同的网络?

您的代码是正确的,但您的设置搞砸了;)

【讨论】:

  • 您好,感谢您的回答,我现在正在回答您的问题我尝试将 POST 方法与在 GAE URL 上执行它的 GET 方法交换,但它没有用。我的应用程序有使用互联网的权限,它能够访问服务器上的 sql 数据库,它是它似乎能够监听的接口。呃? UI线程上的网络调用?谁能告诉我这件事?很抱歉没有单独回答,但我不允许。
【解决方案2】:

到目前为止人们所说的一切都是可能的,但没有人问你是否在 UI 线程上运行网络调用。如果是这样,您的应用程序将由于潜在的挂断而无法运行,您将需要研究 AsyncTasks 来解决您的问题。

【讨论】:

  • 您好,感谢您的回答,我现在正在回答您的问题我尝试将 POST 方法与在 GAE URL 上执行它的 GET 方法交换,但它没有用。我的应用程序有使用互联网的权限,它能够访问服务器上的 sql 数据库,它是它似乎能够监听的接口。呃? UI线程上的网络调用?谁能告诉我这件事?很抱歉没有单独回答,但我不允许。
  • 因此,如果您想使用 HttpPost 等,为了实际访问网络服务器,您必须启动另一个线程来执行此操作。在控制 UI 的线程上不允许进行任何此类访问,因为它可能导致应用程序挂起并因 ANR 错误而崩溃,这是不好的。 AsyncTasks 通常用于执行此操作,因此您应该检查它们。
  • 我试图在 AsyncTask 上将它分开,但还是一样...嗯,非常感谢您尝试帮助我。
  • 嗯,不完全一样,我进入了调试模式,现在 post 调用正在完成,但无论我在 doPost 方法中放置什么,它似乎都不起作用。
  • 嗯,也许您应该更新您的原始帖子以反映您当前的代码。需要在 AsyncTask 中的行是 String response=hc.execute(postMethod,res);因为那是实际的网络调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多