Получить метаданные для списка видео YouTube, используя API YouTube и Volley Android

Я разрабатываю приложение для Android, в котором мне нужно получить заголовки всех видео, хранящихся в виде ArrayList. Теперь я могу легко получить название одного видео, используя Volley. Для получения списка всех заголовков я вызываю функцию запроса внутри цикла, который проходит через массив. Теперь я не могу получить результаты в правильном порядке и знаю причину, поскольку это асинхронная задача. Я пытался найти какой-то обходной путь, но все еще борется. Может кто-нибудь помочь мне сделать это и получить названия видео в правильном порядке. Вот код, который я использую, чтобы получить метаданные для одного видео.

   private void gettitle(final latestsongs.VolleyCallback callback, String id)
{
    String youtubeURL ="https://www.youtube.com/watch?v="+id;
    Log.e("URL is ",youtubeURL);
    String youtubeURLJson = "http://www.youtube.com/oembed?url=" + youtubeURL + "&format=json";
    StringRequest strReq = new StringRequest(Request.Method.GET, youtubeURLJson, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {

            //Log.e("responce",""+response);

            try {
                //JSONArray JsonArray = new JSONArray(response);
                JSONObject jsonObject = new JSONObject(response);

                //for (int i = 0; i < 1; i++) {

                //JSONObject obj = JsonArray.getJSONObject(0);

                String text= jsonObject.getString("title");
                //  String id= obj.getString ( "id" );



                String title = text ;
                //Log.e("Youtube video title","Video Title = "+title);
                callback.onSuccess(title);

            } catch (JSONException e) {
                // JSON error
                e.printStackTrace();
                System.out.println(e.getMessage());

            }
        }
    }, new Response.ErrorListener() {
        @Override


        public void onErrorResponse(VolleyError error) {


        }
    }) {

    };

    AppController.getInstance().addToRequestQueue(strReq);
}

Класс AppController обрабатывает запросы Volley.

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

 for (int i = 0; i < videoIDArray.length; i++) {
        final YoutubeVideoModel youtubeVideoModel = new YoutubeVideoModel();
        youtubeVideoModel.setVideoId(videoIDArray[i]);
        youtubeVideoModelArrayList.add(youtubeVideoModel);

        gettitle(new latestsongs.VolleyCallback(){
                     @Override
                     public void onSuccess(String result){
                         int i=0;
                         youtubeVideoModelArrayList.get(i).setTitle(result);
                        adapter.notifyDataSetChanged();
                        i++;

                     }
                 },
                videoIDArray[i]);


    }

0 ответов

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