【发布时间】:2016-12-31 16:25:10
【问题描述】:
实现我的LoginActivity.java,我设置了另一个文件+class,名为AuthClient,它大量使用了Volley。 UserLoginTask 需要从其doInBackground 返回一个Boolean,以便远程调用登录成功/失败。
所以跟随Can I do a synchronous request with volley?,我设置:
void login(final HashMap<String, String> data,
Response.Listener<JSONObject> listener,
Response.ErrorListener errorListener) {
JsonObjectRequest req = new JsonObjectRequest(
api_prefix + "/auth", new JSONObject(data), listener, errorListener
);
queue.add(req); // RequestQueue
}
boolean loginResponseHandler(RequestFuture<VolleyError> err_future,
RequestFuture<JSONObject> future) {
try {
VolleyError err_response = err_future.get();
JSONObject response = future.get();
System.out.println("response.toString() = " + response.toString());
return true;
} catch (InterruptedException | ExecutionException e) {
System.err.println("e = " + e.toString());
return false;
} catch (Exception e) { // Even tried this!
System.err.println("Exception::e = " + e.toString());
throw e;
}
}
@Override
protected Boolean doInBackground(Void... params) {
RequestFuture<JSONObject> future = RequestFuture.newFuture();
RequestFuture<VolleyError> err_future = RequestFuture.newFuture();
login(/*omitted for brevity*/, err_future, future);
return loginResponseHandler(err_future, future);
} // Actual code has login/loginResponseHandler in separate class+file, and more^
但是查看调试日志,我得到了错误(来自其他地方,而不是我正在调试的地方):
08-24 23:17:13.228 7255-7288 E/Volley:[177] BasicNetwork.performRequest:http://192.168.5.3:3003/v1/api/auth 的意外响应代码 400
我应该如何处理错误? - 还有参考脚手架可以使用吗?
【问题讨论】:
-
主要问题是为什么?如果您使用的是
RequestFuture<T>.get,为什么要使用 Volley?这没有任何意义...... -
Volley 仅用于来自主线程的异步查询。使用普通的
URL或doInBackground中的内容 -
Selvin:因为在测试和其他使用
AuthClient的代码区域中,我不需要立即得到结果。我在这里 [对吗?] 所以现在我需要doInBackground来运行一个函数并返回结果。但也许还有另一种方式! - 不管我的实现是行不通的。 -
@Serg:Volley 做了很多缓存,这也很有用。
标签: java android error-handling android-volley dalvik