我正在尝试使用loopj的async http library向服务器发送POST。以下代码非常标准,但我无法使其工作。
我调试了很多并检查了以下内容:
在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);
}
});
我正在使用此lib,因为它允许我将稍后需要的文件发送到此项目中。如果有另一个lib做同样的事情(并且实际上有效),那对我来说没问题。
我的问题是:为什么我没有得到任何回调,我该如何解决?当事情不明确时告诉我,我会尝试更深入地解释。
答案 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);
}
});
那么你会得到它的回应