如何利用 AsyncTask 处理异步 RestRequests
How to utilize AsyncTask for handling asynchronous RestRequests
我想通过 android 应用程序访问在线 API。为此,我编写了易于访问的函数来通过 android Volley 包发送请求。但是,当我尝试将通过发送请求收到的值分配给 TextView 时,应用程序会立即显示 0。我意识到这可能是因为该函数将对象处理为 "null" 因为响应尚未到达并且我需要使用 AsyncTasks 来正确处理此问题但是 Android Studio 的开发人员指南没有真的帮了我太多,因为绝对 100% 诚实地对你说,我不是软件工程师,在这一点上我完全迷路了。
下面是一些关于如何访问 API 的代码:
org.json.JSONObject makeRequest(String URL, String method, String[] headers){
int reqType;
switch(method.toUpperCase()){
case "GET":
reqType = Request.Method.GET;
break;
case "DELETE":
reqType = Request.Method.DELETE;
break;
default:
return null;
}
Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>(){
@Override
public void onResponse(JSONObject Response){
result = Response;
}
};
Response.ErrorListener err = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
result = null;
}
};
JsonObjectRequest req = new JsonObjectRequest(reqType, URL, null, listener, err){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put(headers[0], headers[1]);
return params;
}
};
;
rQ_volley.add(req);
return result;
}
还有一些关于我在哪里访问上述方法的代码
JSONArray koordTargetArr = rBuild.makeRequestArr("https://nominatim.openstreetmap.org/search?q="+target+"&format=json&polygon=1&addressdetails=1", "get",headersLonLat);
if(koordTargetArr != null) {
JSONObject koordTargetOBJ = koordTargetArr.getJSONObject(0);
koordTarget = koordTargetOBJ.getString("lon").concat(",").concat(koordTargetOBJ.getString("lat"));
}
else return 0;
如果您能在我实现 AsyncTask 的位置以及如何构建 AsyncTask 等方面提供帮助,我将不胜感激。如果有帮助的话,我在 Node.js 的异步库中有经验。
编辑:
这不是 的副本我已经知道如何发送 HTTP 请求,我不知道如何使用 android AsyncTask,HTTP 请求不是这个问题的主题。
您是否考虑过使用 Retrofit?
它将处理、构造和反序列化您所有的网络需求,而无需使用 AsyncTask + 自定义实用程序函数。
我想通过 android 应用程序访问在线 API。为此,我编写了易于访问的函数来通过 android Volley 包发送请求。但是,当我尝试将通过发送请求收到的值分配给 TextView 时,应用程序会立即显示 0。我意识到这可能是因为该函数将对象处理为 "null" 因为响应尚未到达并且我需要使用 AsyncTasks 来正确处理此问题但是 Android Studio 的开发人员指南没有真的帮了我太多,因为绝对 100% 诚实地对你说,我不是软件工程师,在这一点上我完全迷路了。
下面是一些关于如何访问 API 的代码:
org.json.JSONObject makeRequest(String URL, String method, String[] headers){
int reqType;
switch(method.toUpperCase()){
case "GET":
reqType = Request.Method.GET;
break;
case "DELETE":
reqType = Request.Method.DELETE;
break;
default:
return null;
}
Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>(){
@Override
public void onResponse(JSONObject Response){
result = Response;
}
};
Response.ErrorListener err = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
result = null;
}
};
JsonObjectRequest req = new JsonObjectRequest(reqType, URL, null, listener, err){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put(headers[0], headers[1]);
return params;
}
};
;
rQ_volley.add(req);
return result;
}
还有一些关于我在哪里访问上述方法的代码
JSONArray koordTargetArr = rBuild.makeRequestArr("https://nominatim.openstreetmap.org/search?q="+target+"&format=json&polygon=1&addressdetails=1", "get",headersLonLat);
if(koordTargetArr != null) {
JSONObject koordTargetOBJ = koordTargetArr.getJSONObject(0);
koordTarget = koordTargetOBJ.getString("lon").concat(",").concat(koordTargetOBJ.getString("lat"));
}
else return 0;
如果您能在我实现 AsyncTask 的位置以及如何构建 AsyncTask 等方面提供帮助,我将不胜感激。如果有帮助的话,我在 Node.js 的异步库中有经验。
编辑: 这不是 的副本我已经知道如何发送 HTTP 请求,我不知道如何使用 android AsyncTask,HTTP 请求不是这个问题的主题。
您是否考虑过使用 Retrofit?
它将处理、构造和反序列化您所有的网络需求,而无需使用 AsyncTask + 自定义实用程序函数。