在我的项目中,我使用" Volley"从我的服务器接收数据。 lib,我制作了返回JSON编码值的PHP文件,我想获取这些值并从中返回它们而不仅仅是在StringRequest中处理它们,
我的代码是:
public static void getStatus(final String id, final Marker marker1)
{
// Tag used to cancel the request
String tag_string_req = "req_register";
temp="";
StringRequest strReq = new StringRequest(
Request.Method.POST,
"http://URL/file.php",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jObj = new JSONObject(response);
String status = jObj.getString("string");
temp = status;
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to getData url
Map<String, String> params = new HashMap<String, String>();
params.put("id", id);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
如何返回字符串&#34; status&#34;从这个方法? (如果我将方法从void更改为String,我仍然无法从onResponse内部返回任何值(idk为什么......))?请向我解释为什么以及如何使其发挥作用?
答案 0 :(得分:0)
简短的回答是你没有回来。你也不应该。
相反,您将结果传递给下一个要执行的代码块。这可以是一个单独的方法,也可以全部在StringRequest onResponse中完成。
重点是你不能在顶部指定temp,在StringRequest中设置它,然后在addToRequestQueue
之后的行上预期值
答案 1 :(得分:0)
这种类型的异步方法(StringRequest)与其他方法不同。为此,您可以在https://developer.android.com/reference/java/lang/Thread
上查看线程的文档。您不能直接从字符串请求的响应中返回任何内容。 StringRequest从服务器端API获取的JSON对象参数的格式为 [{“ success”:“ 1”}] 。在这里,请注意,JSON对象的形成类似于 {key:value} 对。因此,JSON对象的键是“:” 的左侧值,响应值是右侧的值。在上面的响应中,键“成功”返回“ 1”。您可以在类中显式引入字段参数,并使用该变量在onResponse中捕获响应值,然后根据需要使用它。希望此信息对您有所帮助。因此,只需从getStatus内部删除temp声明,然后在类字段中进行声明即可。希望这会对您有所帮助!