在 Android 中使用 volley (java) 调用 Youtbe api 时出现客户端错误 400

如何解决在 Android 中使用 volley (java) 调用 Youtbe api 时出现客户端错误 400

我正在尝试使用 youtube API 创建一个播放列表。 我拥有所有必需的令牌和密钥 - API 密钥、用户授权后获得的访问令牌。

我正在使用 volley 来处理我的帖子请求,但我收到了 ClientError 400 并且我无法解决它。

注意:它适用于邮递员,我收到了响应 JSON。

这里提到了参数、正文和标题https://developers.google.com/youtube/v3/docs/playlistItems/insert

HTTP 请求如下:

POST https://youtube.googleapis.com/youtube/v3/playlists?part=snippet%2Cstatus&key=[YOUR_API_KEY] HTTP/1.1

Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json
Content-Type: application/json

{
  "snippet": {
    "title": "Sample playlist created via API"
  }
}

这是我的代码

    private void createYoutubePlaylist(){
        String endPoint = "https://www.googleapis.com/youtube/v3/playlists";
        RequestQueue queue = Volley.newRequestQueue(this);
        JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST,endPoint,createPlaylistReqBody("my playlist","hello","en"),new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("demo",response.toString());
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("demo",String.valueOf(error.networkResponse.statusCode));
            }
        }){
            @Override
            public Map<String,String> getHeaders() throws AuthFailureError{
                HashMap<String,String> headers = new HashMap<String,String>();
                Log.d("demo","the gaccesstoken is : " + GoogleAPIAccesstoken);
                headers.put("Authorization","Bearer " + GoogleAPIAccesstoken);
                //headers.put("Content-type","application/json");
                return headers;
            }

            @Override
            public Map<String,String> getParams(){
                HashMap<String,String> params = new HashMap<String,String>();
                params.put("part","snippet");
                params.put("key",API_KEY);
                return params;
            }

//            @Override
//            public byte[] getBody(){
//                String body;
//                body = createPlaylistReqBody("my test playlist","this is a test playlist","en");
//                return body.getBytes();
//            }

            @Override
            public String getBodyContentType() {
                return "application/json";
            }

        };

        queue.add(req);
    }


    private JSONObject createPlaylistReqBody(String title,String description,String defaultLanguage ){
        JSONObject json = new JSONObject();
        try {
            json.put("title",title);
            //json.put("description",description);
            //json.put("defualtLanguage",defaultLanguage);
        } catch (JSONException e) {
            e.printstacktrace();
        }
        JSONObject finalJSON = new JSONObject();
        try {
            finalJSON.put("snippet",json);
        } catch (JSONException e) {
            e.printstacktrace();
        }
        String jsonString = finalJSON.toString();
        Log.d("demo","the json string is :");
        Log.d("demo",jsonString);
        return finalJSON;
    }

这是我得到的错误 JSON

{"error":{"code":400,"message":"'snippet'","errors":[{"message":"'snippet'","domain":"youtube.part","reason":"unexpectedPart","location":"part","locationType":"parameter"}]}}

注意:GoogleAPIAccesstoken 和 API_KEY 在函数调用之前被初始化。所以它们不是空字符串。

请让我知道我哪里出错了。提前致谢!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?