Получить метаданные для списка видео 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]);
}