7

我正在尝试使用 loopj 的async http library将 POST 发送到服务器。以下代码非常标准,但我无法让它工作。

我已经调试了很多并检查了以下内容:

  • 网址是正确的。
  • 参数是正确的,它们被正确地存储到 params 变量中。

似乎HttpResponse response = client.execute(request, context);在请求中调用时AsyncHttpRequest.makeRequest()不包含任何参数:

编辑:在查看代码后,似乎 POST 参数可能包含在实体或标头组中。

在此处输入图像描述

但真正的问题是我没有得到任何回调(见下面的代码)。调用后的if语句client.execute()永远不会被调用(不触​​发断点)。

RequestParams params = new RequestParams();
params.put("loginid", "user");
params.put("password", "pass");
params.put("deviceid", "deviceid");

AsyncHttpClient client = new AsyncHttpClient();
client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response);
        singleton.connectionSuccessful(response, returnIndex);
    }

    @Override
    public void onFailure(Throwable error, String content) {
        Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + content);
        singleton.connectionFailed("Login Failed", error.getMessage(), returnIndex);
    }
});

我正在使用这个库,因为它可以让我将稍后需要的文件发送到这个项目中。如果有另一个库可以做同样的事情(并且确实有效),那对我来说很好。

我的问题是:为什么我没有收到任何回调,我该如何解决这个问题?有不清楚的地方告诉我,我会尝试更深入地解释。

4

4 回答 4

3

看来我的android.permission.INTERNET条目已从清单文件中删除。再次添加后,一切都按预期工作。每次出现问题时,我都会检查我的权限。

于 2013-07-13T16:27:03.067 回答
1

试试这个简单的片段。

这适用于我的设备。

它打印“失败”,因为不允许 POST(HTTP 状态:405)

AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("q", "google");

client.post("http://google.com", params, new AsyncHttpResponseHandler(){
     public void onSuccess(String arg0) {
         Log.d("TAG", "Success");        
     };                                      

     public void onFailure(Throwable arg0, String arg1) {
         Log.d("TAG", "Failure");        
     }; 
}); 
于 2013-07-10T20:40:56.563 回答
0

好吧,我对这个库一无所知,但为什么不尝试使用 AsyncTasks 制作类似的东西呢?例如,您可以继承 AsyncTask 并为其提供要加载的 URL。另一种方法是继承 AsyncTask 并为其提供一个 Callable 对象。这种方法将允许您概括此类,使其适合执行不同的长时间任务,而不仅仅是网络请求。这两种方法都可以利用一些带有回调的接口(onSuccess,onFailure)。在 onPostExecuteMethod 中可以判断任务执行过程中是否出错,并提供需要回调。

于 2013-07-09T09:34:49.267 回答
0

在您的代码中,您直接从 post 方法调用 responsehander。第一的:

 client.post(MDSettings.BASE_URL + "/user/login", params, responseHandler);

在下一行中添加 get 方法

 client.get(MDSettings.BASE_URL + "/user/login", new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            System.out.println(response);
        }
    });

然后你会得到它的回应

于 2013-07-10T07:05:54.117 回答