Я разрабатываю приложение Android, которое извлекает плейлисты с канала и показывает все его видео в каждом плейлисте на одной странице. Но я не знаю, как использовать Asyn c Task для получения этих данных, потому что данные нужно будет получить сразу, но я не знаю, как это сделать. Невозможно использовать параметры в Asyn c Task, и ее также нужно запустить throw al oop, так что есть идеи, что я могу сделать? Кроме того, это приложение предназначено для размещения в Магазине, поэтому оно должно быть разрешено Google. Вот мой код, я получаю идентификаторы и названия списков воспроизведения.
package com.saikari.bhojpurimovies.activities;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import com.saikari.bhojpurimovies.R;
import com.saikari.bhojpurimovies.adapters.VerticalRVAdapter;
import com.saikari.bhojpurimovies.models.HorizontalModel;
import com.saikari.bhojpurimovies.models.VerticalModel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static String GOOGLE_YOUTUBE_API_KEY = "";
private static String CHANNEL_ID = "";
private static String CHANNEL_GET_URL = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=" + CHANNEL_ID + "&key=" + GOOGLE_YOUTUBE_API_KEY + "&maxResults=50";
private String play_list_id = null;
private String VIDEO_LIST_URL = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key"+GOOGLE_YOUTUBE_API_KEY+"&maxResults=50&playlistId="+play_list_id;
VerticalRVAdapter adapter;
RecyclerView verticalRecyclerView;
ArrayList<VerticalModel> mListData = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verticalRecyclerView = findViewById(R.id.recycler_view);
verticalRecyclerView.setHasFixedSize(true);
initList(mListData);
new RequestYoutubeAPI().execute();
}
private void initList(ArrayList<VerticalModel> mListData) {
verticalRecyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new VerticalRVAdapter(this, mListData);
verticalRecyclerView.setAdapter(adapter);
}
private class RequestYoutubeAPI extends AsyncTask<Void, String, String> {
OkHttpClient httpClient = new OkHttpClient();
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... voids) {
Request.Builder builder = new Request.Builder();
builder.url(CHANNEL_GET_URL);
Request request = builder.build();
try {
Response response = httpClient.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if (response != null) {
try {
JSONObject jsonObject = new JSONObject(response);
mListData = parseVideoListFromResponse(jsonObject);
initList(mListData);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
private ArrayList<VerticalModel> parseVideoListFromResponse(JSONObject jsonObject) {
ArrayList<VerticalModel> mList = new ArrayList<>();
if (jsonObject.has("items")) {
try {
JSONArray jsonArray = jsonObject.getJSONArray("items");
Log.i("jsonArray", jsonArray.toString());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
if (json.has("id")){
play_list_id = json.getString("id");
}
if (json.has("kind")) {
if (json.getString("kind").equals("youtube#playlist")) {
VerticalModel vm = new VerticalModel();
JSONObject jsonSnippet = json.getJSONObject("snippet");
String title = jsonSnippet.getString("title");
vm.setCat_title(title);
vm.setVidArrayList(arrayListHorizontal);
mList.add(vm);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return mList;
}
}