Получить метаданные для списка видео YouTube, используя API YouTube и Volley Android - PullRequest
0 голосов
/ 25 октября 2018

Я разрабатываю приложение для 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]);


    }
...