AsyncHttpRequest POST不触发回调(android-async-http by loopj)

时间:2013-07-04 15:26:12

标签: android post asynchronous loopj

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

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

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

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

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

enter image description here

但真正的问题是我没有得到任何回调(见下面的代码)。永远不会调用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);
    }
});

我正在使用此lib,因为它允许我将稍后需要的文件发送到此项目中。如果有另一个lib做同样的事情(并且实际上有效),那对我来说没问题。

我的问题是:为什么我没有得到任何回调,我该如何解决?当事情不明确时告诉我,我会尝试更深入地解释。

4 个答案:

答案 0 :(得分:3)

似乎我的android.permission.INTERNET条目已从清单文件中删除。再次添加后,一切都按预期工作。每当有些东西不起作用时,我都会检查我的权限。

答案 1 :(得分: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");        
     }; 
}); 

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

那么你会得到它的回应