Мой сервер 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
Спасибо за ваше время.
вы описываете проблему, но это ускорит решение, если вы поставите полный код волейбола в вашем Q тоже. (onResponce) - это всего лишь часть volley – Tasos
Вы должны переопределить getBody() вместо getParams() – BNK