2016-04-14 3 views
0

Итак, я пытаюсь разобрать массив объектов из json, используя библиотеку Gson Google и Volley для HTTP-запросов. Моя проблема в том, что это как будто код не «ударил» OnResponse звонок. Я попытался добавить простую распечатку журнала внутри функции, чтобы убедиться, что она что-то делает.Разбор JSONArray с использованием Gson + Volley не получает ответа

Мой GsonRequest класс приходит прямо от Google's Training Docs. Я построил эти методы на основе ответа на вопрос this question.

Это мой код:

private void runVolleyJson() throws AuthFailureError { 
    GsonRequest<Meetings> getMeetings = new GsonRequest<Meetings>(AUTH_URL, Meetings.class, getHeaders(), 
      createMyReqSuccessListener(), 
      createMyReqErrorListener()); 
    helper.add(getMeetings); 
} 

private Response.Listener<Meetings> createMyReqSuccessListener() { 
    return new Response.Listener<Meetings>() { 
     @Override 
     public void onResponse(Meetings response) { 
      // NOTHING HAPPENS FROM HERE! 
      try { 
       Log.d("response", response.toString()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      // Do whatever you want to do with response; 
      // Like response.tags.getListing_count(); etc. etc. 
     } 
    }; 
} 

private Response.ErrorListener createMyReqErrorListener() { 
    return new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      // Do whatever you want to do with error.getMessage(); 
     } 
    }; 
} 

public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> map = new HashMap<>(); 
    map.put("Content-Type", "application/json;"); 
    map.put("Authorization", "Bearer <sometoken>"); 
    return map; 
} 

Там нет абсолютно никаких ошибок. Он разрешает запрос, но ничего не происходит в OnResponse, он просто игнорирует эту функцию.

Теперь я попытался с помощью стандартного StringRequest с залпом, и она работает безупречно, как это:

private void runVolleyTest() { 

    StringRequest request = new StringRequest(Request.Method.GET, AUTH_URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONArray jsonarray = new JSONArray(response); 
         for(int i = 0; i < jsonarray.length(); i++) { 
                  Gson gson = new Gson(); 
          Meeting m = gson.fromJson(jsonarray.get(i).toString(), Meeting.class); 
          Log.e("Meeting", m.getMeetingId() + " " + m.getStatus()); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        ; 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        txtError(error); 
       } 
      }) { 
     @Override 
     public Map<String, String> getHeaders() { 
      HashMap<String, String> map = new HashMap<>(); 
      map.put("Content-Type", "application/json;"); 
      map.put("Authorization", "Bearer <sometoken>"); 
      return map; 
     } 
    }; 

    //request.setPriority(Request.Priority.HIGH); 
    helper.add(request); 
} 
+0

Попробуйте сделать JsonObjectRequest, а затем проанализируйте ответ с помощью GSON, чтобы убедиться, что класс запроса сам по себе не работает. Известно, что в документах Google есть устаревшие данные о тренировках. – zgc7009

+0

is 'onErrorResponse' получает вызов? .. если да, то что такое журнал – Bharatesh

ответ

0

Попробуйте добавить эту строку в начале

RequestQueue helper = Volley.newRequestQueue(mContext); 
+0

Это должно было быть сделано уже или вызов helper.add (getMeetings) вызовет NPE – zgc7009

0

Добавить эти строки

RequestQueue requestQueue = Volley.newRequestQueue(context); 
    requestQueue.add(stringRequest); 

Если вы не хотите сохранять ответ в кэш-памяти, то добавьте это

requestQueue.add(stringRequest); 

По моему мнению, это лучше, если вы передадите контекст приложения.

+0

Я не думаю, что это действительно отвечает на вопрос, my helper.add вызывает очередь запросов, определенную в моем классе приложения –

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