LoopjPut和Post使用基本身份验证返回空响应,没有错误



这是一种尝试,将Loopj用于HTTP实用程序类的同步put和post调用。该代码使用同步客户端,因为它在AsyncTask中使用,并且一些UI交互在很大程度上依赖于json响应,因此AsyncTask管理异步调用。

来自HTTP实用程序类的所有get调用都能成功工作。post和put没有,它们似乎都有完全相同的问题

json字符串是使用Gson创建的。我已经在Postman中直接测试了应用程序的json输出,它完全按照预期发布到API,因此它看起来格式良好,行为完全按照预期,没有任何错误。

put和post调用都是在不引发错误的情况下构造的。正在添加基本授权(如客户端实例所示(。SyncHTTPClient put方法是使用null上下文参数调用的。我做了一些研究,找到了一个成功的帖子。

https://github.com/loopj/android-async-http/issues/1139

put调用会激发,但不会输入处理程序的重写方法。它只是返回null。我已经包括了工人阶级的一部分来查看:

public void executePutSave(String name, String pass, String jsonBody) {
client.setBasicAuth(name, pass);
executeLoopJPutCall("/api/Save", jsonBody);
}
public void executeLoopJPutCall(String relativeUrl, String jsonBody) {
String url = getAbsoluteUrl(relativeUrl);
StringEntity entity = new StringEntity(jsonBody, "UTF-8");
jsonResponse = null;
client.put(null, url, entity, "application/json", new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
jsonResponse = response.toString();
Log.i(TAG, "onSuccess: " + jsonResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { 
super.onFailure(statusCode, headers, throwable, errorResponse);
jsonResponse = errorResponse.toString();
Log.e(TAG, "onFailure: " + statusCode + errorResponse );
}
}
);
}

因此,显然,当使用上面的代码将json发布或放入API时,必须显式添加头。一旦我更改了头验证行:

client.setBasicAuth(name, pass);

对此:

String userpass = name + ":" + pass;
String encoded = new String(Base64.encode(userpass.getBytes(),Base64.NO_WRAP));
client.addHeader("Authorization", "Basic "+encoded);

一切如预期。

我在这个博客上找到了以下信息:https://github.com/loopj/android-async-http/issues/113

传递null上下文也起作用。

相关内容

  • 没有找到相关文章

最新更新