我正在尝试为我的应用创建一个登录页面。我通过对绑定到我的用户数据库的Web服务器执行get请求来检查凭据。
public boolean checkCredentials(String email, String password) throws JSONException {
// Make a get request to the server
String url = MyUtils.createLoginUrl(email, password);
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, requestParam, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
successLogin = response.length() > 0;
jsonResponse = response.length() > 0 ? response : null;
//requestPending -= 1;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
MyUtils.showToast(getBaseContext(), error.getMessage().toString());
//requestPending -= 1;
}
});
SingletonRequestQueue.getInstance(this).addToRequestQueue(jsObjRequest);
//requestPending += 1;
// I WANT THE JOB TO FINISH BEFORE RETURNING FROM THIS FUNCTION
return successLogin;
}
使用Volley库是否有非阻塞方式?谷歌并没有给我很多信息。
答案 0 :(得分:0)
你不能和Volley一起使用其他工具。长时间运行的操作,如前往数据库或网络阻止UI线程,这是一个不好的做法,因为用户无法与UI进行交互。
谈论凌空,它在三个线程级别中完成所有这些工作异步:
请参阅here架构。 所有三个级别都允许系统缓存响应,并使用池线程在有足够空间和内存的情况下同时分派所有请求。
前段时间人们建议你这样做:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
这避免了NetworkOnMainThreadException
,但正如我之前告诉你的那样,这是一个非常 糟糕的做法 ,因为你将通过等待来跳过一堆帧。
我知道听众很痛苦,但我们必须在Android Dev中与他们一起生活。