【问题标题】:Return data from my StringRequest - Volley lib从我的 StringRequest 返回数据 - Volley lib
【发布时间】:2017-11-20 11:19:09
【问题描述】:

在我的项目中,我使用“Volley”库从我的服务器接收数据,我制作了返回 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);

    }

如何从这个方法返回字符串“status”? (如果我将方法从 void 更改为 String,我仍然无法从 onResponse 内部返回任何值(idk 为什么......))?请向我解释为什么以及如何使它工作?

【问题讨论】:

  • 只需在onResponse 中调用另一个方法,该方法接受您想要返回的任何内容

标签: java android json return android-volley


【解决方案1】:

简短的回答是你不会回来。你也不应该。

相反,您将结果传递到您接下来要执行的任何代码块中。这可以是一个单独的方法,也可以全部在 StringRequest onResponse 中完成。

重点是你不能在顶部分配temp,在StringRequest中设置它,然后在addToRequestQueue之后的行上期待一个值

【讨论】:

  • 是的,我知道将 temp 作为返回字符串是行不通的,但你能解释一下为什么吗?或者我在哪里可以阅读?
  • 这就是异步代码的工作原理。线程是您可以阅读的一般主题
  • 在类似的方面,您可能已经看到 Asynctask 与 Volley 的比较。您也可以使用响应侦听器构建 Asynctask stackoverflow.com/questions/12575068/…
  • 谢谢你,这对我有很大帮助。
【解决方案2】:

这种类型的异步方法(StringRequest)不像其他方法那样工作。为此,您可以在此处查看线​​程文档https://developer.android.com/reference/java/lang/Thread

您不能直接从字符串请求的响应中返回任何内容。 StringRequest 从服务器端 API 获取的 JSON 对象参数的格式为 [{"success":"1"}]。在这里,请注意 JSON 对象的形成类似于 {key:value} 对。因此,JSON 对象的键是 ":" 的左侧值,响应值是右侧的值。在上述响应中,键“success”返回“1”。您可以在类中显式引入字段参数并使用该变量来捕获 onResponse 中的响应值,然后根据需要使用它。希望这些信息对您有所帮助。因此,只需从 getStatus 中删除临时声明并在上面的类字段中声明它。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2023-03-19
    • 2018-06-14
    • 2020-03-18
    相关资源
    最近更新 更多