无法将类型为java.lang.String的ID的值[YoutubePlaylistID]转换为JSONObject

问题描述 投票:0回答:1

我正在尝试创建一个将使用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。我...

json android-studio android-volley youtube-data-api
1个回答
1
投票

[当需要获得给定播放列表的所有视频ID

© www.soinside.com 2019 - 2024. All rights reserved.