从我的StringRequest返回数据 - Volley lib

时间:2017-06-17 23:13:30

标签: java android json return android-volley

在我的项目中,我使用" 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为什么......))?请向我解释为什么以及如何使其发挥作用?

2 个答案:

答案 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声明,然后在类字段中进行声明即可。希望这会对您有所帮助!