Java 从我的StringRequest返回数据-凌空库
在我的项目中,我使用“Volley”lib从服务器接收数据,我创建了PHP文件,返回JSON编码的值,我希望获取这些值并从中返回,而不仅仅是在StringRequest中处理它们 我的代码是:Java 从我的StringRequest返回数据-凌空库,java,android,json,return,android-volley,Java,Android,Json,Return,Android Volley,在我的项目中,我使用“Volley”lib从服务器接收数据,我创建了PHP文件,返回JSON编码的值,我希望获取这些值并从中返回,而不仅仅是在StringRequest中处理它们 我的代码是: public static void getStatus(final String id, final Marker marker1) { // Tag used to cancel the request String tag_string_req = "req_
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);
}
publicstaticvoidgetstatus(最终字符串id,最终标记marker1)
{
//用于取消请求的标记
String tag_String_req=“req_register”;
温度=”;
StringRequest strReq=新StringRequest(
Request.Method.POST,
"http://URL/file.php",
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject jObj=新的JSONObject(响应);
字符串状态=jObj.getString(“字符串”);
温度=状态;
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
受保护的映射getParams(){
//将参数发布到getData url
Map params=新的HashMap();
参数put(“id”,id);
返回参数;
}
};
//将请求添加到请求队列
AppController.getInstance().addToRequestQueue(streq,标记字符串请求);
}
如何从该方法返回字符串“status”?(如果我将方法从void更改为String,我仍然无法从onResponse内部返回任何值(idk why…)?请向我解释为什么以及如何让它工作?简单的回答是你不回来。你也不应该 相反,您可以将结果传递到下一步要执行的任何代码块中。这可以是一个单独的方法,也可以全部在StringRequestOnResponse中完成
主要的一点是,您不能在顶部分配temp,在StringRequest中设置它,然后在
addToRequestQueue
之后的行中期望一个值。这种类型的异步方法(StringRequest)与其他方法不同。为此,您可以在此处查看线程文档
不能直接从字符串请求的响应返回任何内容。StringRequest从服务器端API获取的JSON对象参数的格式为[{“success”:“1”}]。在这里,请注意JSON对象的形式类似于{key:value}对。因此,JSON对象的键是左侧的值:“,响应值是右侧的值。在上述响应中,键“success”返回了“1”。您可以显式地在类中引入field参数,并使用该变量捕获onResponse中的响应值,然后根据需要使用它。希望这些信息能对你有所帮助。因此,只需从getStatus内部删除temp声明,并在上面的class字段中声明即可。希望这对你有帮助 只需调用
onResponse
中的另一个方法,该方法接受您想要返回的任何内容是的,我知道将temp作为返回字符串不起作用,但您能解释一下原因吗?我在哪里可以读到呢?异步代码就是这样工作的。线程是你可以阅读的一般主题。在类似的方面,你可能会看到Asynctask与Volley相比。您也可以使用响应侦听器构建一个Asynctask。谢谢您的帮助。