我正在尝试创建一个将使用YoutTube Api从YouTube播放列表中获取所有videoID的应用程序。然后,该应用程序有望在listView中显示所有videoID。
我正在使用Volley处理所有HTTP请求,已将所有Google Api依赖项添加到我的项目中,已在Google Developer Console上注册了我的应用程序,并已在Android Manifest文件中请求Internet权限。 。
但是,我遇到此错误(“ PLTpRNmzKHx18bIns2RMyw9czfPIn8SNpf”是我的播放列表的ID):
运行错误
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”之前定义String变量可以解决此问题。但是,它对我不起作用,因此我将代码恢复为原来的样子。
请看一下我的代码:
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是带有两个字符串变量(title,videoId)的getter和setter方法的公共类。
[我也想知道是否需要同时调用'ContentDetails'和'Snippet'以便从播放列表中获取VideoID,或者我是否可以仅调用两者之一。
希望你能帮助我!
我正在尝试创建一个将使用YoutTube Api从YouTube播放列表中获取所有videoID的应用程序。然后,该应用程序有望在listView中显示所有videoID。我...
[当需要获得给定播放列表的所有视频ID