Я пытаюсь создать приложение, которое будет использовать YoutTube Api для получения всех идентификаторов видео из плейлиста YouTube. Затем, я надеюсь, приложение отобразит все идентификаторы видео в listView.
Я использую Volley для обработки всех запросов HTTP, я добавил все зависимости Google Api в свой проект, зарегистрировал его. мое приложение на консоли разработчика Google, и я запросил разрешение Inte rnet в моем файле манифеста Android.
Однако я сталкиваюсь с этой ошибкой ( "PLTpRNmzKHx18bIns2RMyw9czfPIn8SNpf" - это идентификатор моего списка воспроизведения):
Ошибка запуска
W/System.err: org.json.JSONException: Value PLTpRNmzKHx18bIns2RMyw9czfPIn8SNpf at id of type java.lang.String cannot be converted to JSONObject
W/System.err: at org.json.JSON.typeMismatch(JSON.java:101)
at org.json.JSONObject.getJSONObject(JSONObject.java:616)
at com.utilities.dog.MainActivity$1.onResponse(MainActivity.java:102)
at com.utilities.dog.MainActivity$1.onResponse(MainActivity.java:93)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Я видел, как люди онлайн сталкивались с такой же проблемой. Очевидно, что определение строковой переменной перед вызовом «.getJSONObject» может решить эту проблему. Тем не менее, это не сработало для меня, поэтому я вернул свой код обратно к тому, что было.
Пожалуйста, посмотрите на мой код:
MainActivity. java
ublic class MainActivity extends AppCompatActivity {
[...]
// Playlist URL I want to get data from.
String url = "https://www.googleapis.com/youtube/v3/playlists?part=contentDetails%2C%20snippet%2C%20id&id=PLTpRNmzKHx18bIns2RMyw9czfPIn8SNpf&maxResults=25&key=[My API Key is here]";
private void getVideoIDs()
{
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("items");
for (int i = 0; i<jsonArray.length(); i++){
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
JSONObject jsonVideoId = jsonObject1.getJSONObject("id");
String video_id = jsonVideoId.getString("videoID");
VideoDetails vd = new VideoDetails();
vd.setTitle(video_id);
videoDetailsArrayList.add(vd);
Toast.makeText(getApplicationContext(), video_id, Toast.LENGTH_SHORT).show();
}
listView.setAdapter(myCustomAdapter);
myCustomAdapter.notifyDataSetChanged();
}catch(JSONException e){
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
requestQueue.add(stringRequest);
}
}
VideoDetails. java является публикуемым c классом с методом getter и setter для двух строковых переменных (title, videoId)
Мне также интересно, нужно ли мне вызывать оба ContentDetails и Snippet для получения Идентификаторы видео из плейлиста или, если я могу просто позвонить одному из двух.
Надеюсь, вы мне поможете!