2015-11-15 6 views
1

У меня есть удаленная база данных, содержащая 6 строк.
Вот мой код, я положил его в список, так что я могу получить размер,
Но он всегда возвращался 0.Volley Запрос объекта Возврат 0

public List<Comments> getComments() { 
     final List<Comments> commentsData = new ArrayList<>(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, 
       showUrl, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try { 
        JSONArray jsonArray = response.getJSONArray("poi"); 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
         Comments current = new Comments(); 
         current.image = "drawable://" + R.drawable.juandirection_placeholder; 
         current.title = jsonObject.getString("title"); 
         current.comment = jsonObject.getString("comment"); 
         current.date = jsonObject.getString("date"); 
         current.rating = Integer.parseInt(jsonObject.getString("rating")); 
         commentsData.add(current); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }); 

     VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); 
     return commentsData; 
    } 

мне нужен размер для некоторого использования.
Почему он всегда возвращает ноль?
Я даже попытался добавить счетчик ++ внутри цикла.
Но когда я получаю значение счетчика, оно все равно равно нулю.

ответ

0

JsonObjectRequest работает на фоне потока. Вот почему вы получаете размер списка 0. Вы должны работать в функции public void onResponse(JSONObject response) {}.

Exmp.

@Override 
     public void onResponse(JSONObject response) { 
      try { 
       JSONArray jsonArray = response.getJSONArray("poi"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject jsonObject = jsonArray.getJSONObject(i); 
        Comments current = new Comments(); 
        current.image = "drawable://" + R.drawable.juandirection_placeholder; 
        current.title = jsonObject.getString("title"); 
        current.comment = jsonObject.getString("comment"); 
        current.date = jsonObject.getString("date"); 
        current.rating = Integer.parseInt(jsonObject.getString("rating")); 
        commentsData.add(current); 
       } 

       // **you may call function and pass the list value to update your ui component. you will get the real size of list here.** 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
+0

так вот почему все, что я попробовал, возвращает ноль, потому что он работает на фоне. Один вопрос, является ли JsonObjectRequest лучшим выбором для чего-то подобного? как получить значения для базы данных? есть гораздо лучше библиотеки, чем волейбол? –

+1

Насколько я знаю, Volley является лучшим, а также Google продвигает использование этой библиотеки. ссылка: http://developer.android.com/training/volley/index.html Кроме того, что бы вы ни использовали для вытаскивания данных из удаленной базы данных, вы должны запустить фоновое thead (я имею в виду асинхронный поток). –

+0

Ну. У меня возникла проблема с настройкой адаптера в режиме просмотра вторсырья. Потому что сначала мне нужно, чтобы строки возвращались из базы данных. Во-вторых, мне нужны строки, потому что у меня есть recyclerview с несколькими макетами. –

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