Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从我的StringRequest返回数据-凌空库_Java_Android_Json_Return_Android Volley - Fatal编程技术网

Java 从我的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_

在我的项目中,我使用“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_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。谢谢您的帮助。