Как сохранить ответные модифицированные данные в список - PullRequest
0 голосов
/ 11 июня 2019

Я работаю с модификацией в мобильном андроиде, я хочу сохранить данные ответов в моем общедоступном списке, я пробовал, но мой список все еще нулевой, но данные могут отображаться в onResponse

это моя модернизация

 private APIInterface getInterfaceService() {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
        final APIInterface mInterfaceService = retrofit.create(APIInterface.class);
        return mInterfaceService;
    }

    private void trendingQuestion(final List<Trending> listTrending){
        progressDialog.show();
        APIInterface mApiService = this.getInterfaceService();
        Call<ResponseTrendsQuestion> mService = mApiService.getTendingQuestion();
        mService.enqueue(new Callback<ResponseTrendsQuestion>() {
            @Override
            public void onResponse(Call<ResponseTrendsQuestion> call, Response<ResponseTrendsQuestion> response) {
                if(response.isSuccessful()){
                    for(int i=0;i<response.body().getData().size();i++) {
                        listTrending.add(new Trending(Integer.valueOf(response.body().getData().get(i).getId()),response.body().getData().get(i).getTitle(),
                                response.body().getData().get(i).getDescription(),
                                Integer.valueOf(response.body().getData().get(i).getLikes()),
                                Integer.valueOf(response.body().getData().get(i).getDislikes()),
                                Integer.valueOf(response.body().getData().get(i).getComment())));
                        Log.d("message",response.body().getData().get(i).getId());
                    }
                    progressDialog.dismiss();
                }else{
                    progressDialog.dismiss();
                    Log.d("message",response.errorBody().toString());
                    Toast.makeText(getContext(), response.errorBody().toString(), Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<ResponseTrendsQuestion> call, Throwable t) {
                progressDialog.dismiss();
                Toast.makeText(getContext(), "Connection Failed", Toast.LENGTH_SHORT).show();
            }
        });
    }

мой список

listTrending = new ArrayList<>();
        trendingQuestion(listTrending);

1 Ответ

0 голосов
/ 15 июня 2019

1) Проблема в том, что вы вызываете response.body () несколько раз, в то время как он возвращает тело только один раз.

1-й вызов здесь возвращает тело:

for(int i=0;i<response.body().getData().size();i++) {

Все остальные вызовы возвращают пустое тело. Нет данных для добавления в ваш список, так как вы теряете их при первом вызове. Сохраните тело в переменную перед циклом и используйте его вместо этого.

2) Предположим, что имеет смысл использовать CopyOnWriteArrayList вместо этого, поскольку ArrayList не является потокобезопасным (предположим, что в зависимости от вашего варианта использования вы можете попытаться изменить его одновременно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...