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