#java #json #android-studio
Вопрос:
Я использую GitHub PierfrancescoSoffritti
для Android-youtube-плеера. Основной код использует для воспроизведения видеоИД. Тем не менее, я хотел бы использовать его для прямой трансляции на YouTube, и видеоид может измениться, если поток когда-либо будет воссоздан.
String videoId = "(ID of YouTube Video)";
youTubePlayer.loadVideo(videoId, 0);
Поэтому я пытаюсь использовать GitHub Volley
для выполнения http-запроса к API google YouTube, чтобы получить последнюю видеозапись прямой трансляции.
String url = "https://www.googleapis.com/youtube/v3/search?part=snippetamp;channelId=(MyChannelID)amp;eventType=liveamp;type=videoamp;key=(MyKey)";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
ytapi.setText("Response: " response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
}
});
Это возвращает что-то вроде:
"items": [
{
"kind": "youtube#searchResult",
"etag": "RkUpUQpSKztQlA",
"id": {
"kind": "youtube#video",
"videoId": "GLdex45V_RQ"
В настоящее время я просто отображаю это в текстовом представлении
final TextView ytapi = view.findViewById(R.id.textYouTubeAPI);
Поэтому мой вопрос в том, как я могу передать «видеоИд»: (показано как «GLdex45V_RQ» в приведенном выше примере JSONObject) в метод loadVideo() youtubeplayer. Я предполагаю, что мне нужно проанализировать JSONObject для результата видеосъемки и передать его, но здесь я застрял.
String videoId = "(videoid from JSONObject)";
youTubePlayer.loadVideo(videoId, 0);
Я пробовал что-то вроде
String url = "https://www.googleapis.com/youtube/v3/search?part=snippetamp;channelId=(MyChannelID)amp;eventType=liveamp;type=videoamp;key=(MyKey)";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i ) {
JSONObject id = jsonArray.getJSONObject(i);
String VideoID = id.getString("videoId");
ytapi.setText(VideoID);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener()
{
mQueue.add(request);
Но получите нулевую ссылку на объект на com.android.volley.Запрос
Что, наконец, сработало, чтобы вернуть видео с прямой трансляцией YouTube, используя Volley, API Google YouTube и ответ JSON.
try {
JSONArray jsonArray = response.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i ) {
JSONObject jsonObject = jsonArray.optJSONObject(i);
JSONObject jsonArray1 = jsonObject.getJSONObject("id");
String videoid = jsonArray1.optString("videoId");
ytapi.setText(videoid);
}
} catch (JSONException e) {
e.printStackTrace();
}
Ответ №1:
В моем решении отсутствовал массив.
try {
JSONArray jsonArray = response.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i ) {
JSONObject jsonObject = jsonArray.optJSONObject(i);
JSONObject jsonArray1 = jsonObject.getJSONObject("id");
String videoid = jsonArray1.optString("videoId");
ytapi.setText(videoid);
}
} catch (JSONException e) {
e.printStackTrace();
}