2015-09-17 4 views
0

Мой сервер Node.js отправляет массив из документов JSON из MongoDB, но мое приложение для Android не загрузит его. Я отправил его, используя response.send(placearray);. Однако, если я отправлю обычную строку, например Request received, она отлично работает.Получение строки JSON с использованием Volley

Я использовал отправителя запроса 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: Значение { "_id": "55f97b849b8385cd03730b09", "топоним": "W South Beach", "PlaceType": "Гостиница", "PlaceAddress": «2201 Collins Avenue, Майами-Бич, Флорида, США. Почтовый индекс: 33139.», «PlaceCity»: «Майами», «Оценочная цена»: «2023», «OtherDetails»: «Cool Corner Suite. \ NПанорамный вид на океан. \ nVIP. \ nРазмер: 1,350 кв. футов (125 кв. метров). \ nНет курения. \ n "} в 108 типа java.lang.String не может быть преобразовано в JSONArray

Спасибо за ваше время.

+0

вы описываете проблему, но это ускорит решение, если вы поставите полный код волейбола в вашем Q тоже. (onResponce) - это всего лишь часть volley – Tasos

+0

Вы должны переопределить getBody() вместо getParams() – BNK

ответ

0

, чтобы получить данные массива с 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 на использовании залпа библиотеки

+0

Я просто пробовал это, но я ничего не вижу: – nikodean2

+0

ok вы можете запустить URL-адрес, который даст вам результат Json на браузера и положите результат. Он должен начинаться и заканчиваться на []. – Fakher

+0

Уверен: http://pastebin.com/f8GHCfww – nikodean2

Смежные вопросы