Не загружать последние видео сначала в NextPageToken Youtube API3 в Android

Я хотел загрузить видео с канала YouTube в приложение для Android через YouTube API. Поэтому я добавил код с разбивкой на страницы. Код работает, но проблема заключается не в загрузке последних видео. Они перемешались. Некоторые показывают более одного. Это почему ? пожалуйста, помогите мне решить мою проблему. Я использовал дооснащение.

Вот мой MainActivity.java

public class MainActivity extends AppCompatActivity {

        private static final String TAG = "MainActivity";
        private VideosAdapter adapter;
        //if you are using searchview to get search result then store searched query in lastSearched variable.
        //get latest token and store in lastToken variable.
        private String lastSearched = "", lastToken = "";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            RecyclerView recyclerView = findViewById(R.id.video_list);
            Button more = findViewById(R.id.more);

            adapter = new VideosAdapter();
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
            recyclerView.setAdapter(adapter);

            //load data from api.
            search("", false);

            more.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //load more data
                    search("", true);
                }
            });
        }

        /**
         * call this method to get response from youtube API.
         *
         * @param query String value to search on google, Empty string means get all videos.
         * @param more  if you want to load next page then pass true, this means add new items at bottom of RecyclerView.
         */
        private void search(String query, final boolean more) {

            final ProgressDialog progressDialog = ProgressDialog.show(this, null, "Loading ...", true, false);
            String searchType = "video";
            if (query != null) {
                if (query.startsWith("#")) {
                    searchType = "video";
                    query = query.substring(1);
                } else if (query.startsWith("@")) {
                    searchType = "channel";
                    query = query.substring(1);
                }
            }
            if (!more) {
                lastSearched = query;
                lastToken = "";
            }

            Call<YoutubeResponse> youtubeResponseCall = APIService.youtubeApi.searchVideo(query, searchType, Constants.YOUTUBE_API_KEY, "snippet,id", "5","UCItoVC3HUBA6s9qOEVPILrA", lastToken);
            youtubeResponseCall.enqueue(new Callback<YoutubeResponse>() {
                @Override
                public void onResponse(@NonNull Call<YoutubeResponse> call, @NonNull Response<YoutubeResponse> response) {
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                    }
                    YoutubeResponse body = response.body();
                    if (body != null) {
                        List<YoutubeResponse.Item> items = body.getItems();
                        lastToken = body.getNextPageToken();
                        if (more) {
                            adapter.addAll(items);
                        } else {
                            adapter.replaceWith(items);
                        }
                    }
                }

                @Override
                public void onFailure(@NonNull Call<YoutubeResponse> call, @NonNull Throwable t) {
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                    }
                    Log.e(TAG, "onFailure: ", t);
                }
            });
        }
    }

Вот YoutubeApi.java

public interface YoutubeApi {
    @GET("/youtube/v3/search")
    Call<YoutubeResponse> searchVideo(@Query("q") String query,
                                  @Query("type") String type,
                                  @Query("key") String key,
                                  @Query("part") String part,
                                  @Query("maxResults") String maxResults,
                                  @Query("channelId") String channelId,
                                  @Query("pageToken") String pageToken);
}

Спасибо.

По умолчанию при поиске видео используется порядок актуальность. Попробуйте изменить его на Дата - ресурсы отсортированы в обратном хронологическом порядке по дате их создания. См. параметры, чтобы проверить дополнительные параметры, которые можно использовать для функции search.list().

Mr.Rebot 12.10.2018 17:31

Я не могу этого понять ... у вас есть идеи для кода или у вас есть какой-нибудь код. Спасибо

Mr.Soft 12.10.2018 18:49

Вот ссылка, попробуйте добавить setOrder() в свой запрос

Mr.Rebot 16.10.2018 08:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
122
0

Другие вопросы по теме