【问题标题】:Receiving JSON String Using Volley使用 Volley 接收 JSON 字符串
【发布时间】:2015-09-17 16:44:47
【问题描述】:

我的 Node.js 服务器从 MongoDB 发送一个由 JSON 文档组成的数组,但我的 Android 应用程序不会下载它。我使用response.send(placearray);. 发送它但是,如果我发送像Request received 这样的纯字符串,它可以完美运行。

我使用 POST 请求发送器来测试服务器,它可以正常接收数组,但 Volley 不会。

我了解我以字符串形式接收它的事实可能会导致此问题,但我不知道该怎么做。

这是我使用的程序:

StringRequest PlaceRequest = new StringRequest(Request.Method.POST, url, new      Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            DisplayHotels(response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> PlaceMap = new HashMap<>();
            PlaceMap.put("Test", "Test");
            return PlaceMap;
        }
    };
    PlaceQueue.add(PlaceRequest);

按照 Fakher 的建议,我刚刚尝试过,但仍然无法正常工作:

    JsonArrayRequest PlaceArrayRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            ArrayList MArrList = new ArrayList();
            //MArrList.add(response);
            DisplayHotels(response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Context context = getApplicationContext();
            Toast VerrorToast = Toast.makeText(context, error.toString(), Toast.LENGTH_LONG);
        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> PMap = new HashMap<>();
            PMap.put("Hotels", "All");
            return PMap;
        }
    };

它现在接收到 JSONArray,但它不会解析它,这是我尝试过的代码:

RequestQueue PlaceQueue = Volley.newRequestQueue(this);

    JsonArrayRequest PlaceArrayRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            int i;
            ArrayList<String> MArrList = new ArrayList<>();

                for (i = 0; i < response.length(); i++) {
                    try {
                        JSONArray ConvertedJarray = response.getJSONArray(i);
                        JSONObject PlaceParser = ConvertedJarray.getJSONObject(i);
                        MArrList.add(PlaceParser.get("PlaceName").toString());
                            MArrList.add(response.get(i).toString());
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }

我收到此错误:org.json.JSONException: Value {"_id":"55f97b849b8385cd03730b09","PlaceName":"W South Beach","PlaceType":"Hotel","PlaceAddress":"2201 Collins Avenue ,迈阿密海滩,佛罗里达州,美国。邮政编码:33139。","PlaceCity":"Miami","EstimatedPrice":"2023","OtherDetails":"Cool Corner Suite。\n全景海景。\nVIP 设施。 \n房间大小:1,350 平方英尺(125 平方米)。\n禁止吸烟。\n"} at 108 类型的 java.lang.String 无法转换为 JSONArray

感谢您的宝贵时间。

【问题讨论】:

  • 您正在描述问题,但如果您将完整的 volley 代码也放入 Q 中,它将加快解决速度。 (onResponce) 只是 volley 的一部分
  • 你应该重写 getBody() 而不是 getParams()

标签: android json node.js mongodb android-volley


【解决方案1】:

要使用 Volley 获取数组数据,您必须使用 JsonArrayRequest:

JsonArrayRequest newsReq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {


            }
        });
        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(newsReq);

这是一个很好的tutorial 使用 volley 库

【讨论】:

  • 好的,您能否在浏览器上运行为您提供 Json 结果的 url 并输入结果。它必须以 [ ] 开头和结尾。
  • 好的,你能做一些登录你的代码吗?只需记录 Json 响应,以便我们知道问题出在哪里
  • 谢谢。这个问题已经解决。我使用JsonObject类解析ArrayList中的数据,现在可以正常使用了。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 2013-06-14
  • 2017-09-10
  • 2019-03-03
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2019-03-18
相关资源
最近更新 更多