在Android Studio上使用JsonObjectRequest在Restful API上添加参数

在Android Studio上使用JsonObjectRequest在Restful API上添加参数,android,json,android-webservice,jsonobjectrequest,Android,Json,Android Webservice,Jsonobjectrequest,我在我的android项目上调用了一个restful api,我使用了Volley和JsonObjectRequest,我认为JsonObjectRequest的第三个参数是jsonRequest是api参数,所以我创建了一个json对象,最后我只得到了错误。那么,直接在url上添加api参数是否常见?而不是将其传递给json对象?第三个参数是什么,如果有人能给我举个例子,那将非常有用。我的最后一个问题是如何获得整个json响应,而不是对每个键使用response.getString(“titl

我在我的android项目上调用了一个restful api,我使用了Volley和JsonObjectRequest,我认为JsonObjectRequest的第三个参数是jsonRequest是api参数,所以我创建了一个json对象,最后我只得到了错误。那么,直接在url上添加api参数是否常见?而不是将其传递给json对象?第三个参数是什么,如果有人能给我举个例子,那将非常有用。我的最后一个问题是如何获得整个json响应,而不是对每个键使用
response.getString(“title”)

//api parameters directly added on the url
String URL = "https://www.myapi.com/?param=sample&param1=sample1";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, URL, null,
            new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    String title = response.getString("Title");
                    Log.d("title", title);
                } catch(Exception e){
                    Log.e("response error", e.toString());
                }

            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, error.toString());
            }
        });
//直接添加到url上的api参数
字符串URL=”https://www.myapi.com/?param=sample¶m1=sample1";
JsonObjectRequest=新的JsonObjectRequest(request.Method.POST,URL,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
String title=response.getString(“title”);
日志d(“标题”,标题);
}捕获(例外e){
Log.e(“响应错误”,例如toString());
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记,error.toString());
}
});

在您的响应下面。ErrorListener()您需要添加以下两个覆盖:

new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e(TAG, error.toString());
    }) {
    @Override
    protected Map<String, String> getParams() 
    {  
            Map<String, String>  params = new HashMap<String, String>();  
            params.put("param", "sample");
            params.put("param1", "sample1);

            return params;  
    }

   @Override
   public Map<String, String> getHeaders() throws AuthFailureError {
       HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", "application/x-www-form-urlencoded; charset=UTF-8");
            headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
       return headers;
   }
};
newresponse.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记,error.toString());
}) {
@凌驾
受保护的映射getParams()
{  
Map params=新的HashMap();
参数放置(“参数”、“样本”);
参数put(“参数1”、“样本1”);
返回参数;
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
HashMap headers=新的HashMap();
headers.put(“接受”、“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
headers.put(“内容类型”、“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
返回标题;
}
};

谢谢,但是JsonObject的第三个参数是什么,为什么总是空的?com.android.volley.ParseError:org.json.JSONException:Value第三个参数并不总是空的。第三个参数用于将可能要发布到URL的json对象放入。假设您有一个class对象,将其转换为json并加载在JSONObject中,第三个参数将是该对象。它基本上是将数据放入帖子的消息体中。您是根据什么指令获得JSON异常的?我切换到StringRequest,得到的是html休止符而不是JSON。我认为它无法识别参数。您可以尝试将Accept标头更改为s我使用它是因为我的API发送回的格式。您需要保持内容类型如上所述,因为这就是您要发送的内容。检查HTML中的内容。有时错误会以HTML形式返回,例如500个错误或400个权限错误。在我的情况下,我还使用了StringRequest,并且响应字符串是ac实际上是JSON,我可以将其转换为JSONObject。