Передайте результат JSONObject API YouTube в метод

#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();
                        }