【问题标题】:Unable to make jsonarrayrequest with volley无法使用凌空进行 jsonarrayrequest
【发布时间】:2016-03-25 11:17:51
【问题描述】:

我正在尝试使用 volley 发出帖子请求。

请求参数是一个json数组。

以下是我的请求参数

[
 "Type",
 {
  "User": "email",
  "password": "dimmer",

 }
]

我有一个方法 frameJsonArray 将上面的 json 框起来并发出如下的 post 请求,

 JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(Request.Method.POST, Constants.requestUrl, frameJsonArray(),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                    Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();


                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    hideDialog();
                    error.printStackTrace();

                }
            }
    );

我在上面提出请求的代码行中遇到错误。我怎样才能得到这个排序?

以下是我的错误日志

Error:(162, 46) error: constructor JsonArrayRequest in class JsonArrayRequest cannot be applied to given types;
required: String,Listener<JSONArray>,ErrorListener
found: int,String,JSONArray,<anonymous Listener<JSONObject>>,<anonymous ErrorListener>
reason: actual and formal argument lists differ in length

以下是我的 frameJsonArrayMethod

public JSONArray frameJsonArray() {
    JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("login_type", "Android");
    jsonObject.put("username", email);
    jsonObject.put("password", password);
    jsonObject.put("short_name", null);
    jsonObject.put("ip","123.421.12.21");

} catch (JSONException e) {
    e.printStackTrace();
}
JSONArray jsonArray = new JSONArray();
jsonArray.put("Login");
jsonArray.put(jsonObject);

Log.d(TAG, "he;ll " + jsonArray.toString());
Toast.makeText(getApplicationContext(), jsonArray.toString(), Toast.LENGTH_SHORT).show();
return jsonArray;

}

【问题讨论】:

  • 我已经发布了错误日志
  • 请更正您的 json 数据。完成电子邮件的双重配额方面。像“电子邮件”
  • 是的,我做到了
  • @JyotmanSingh 关于如何使用这些请求参数进行发布请求的任何想法

标签: android android-volley


【解决方案1】:
JsonArrayRequest req = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                     Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();            
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                        pDialog.hide();
                    }
                });

来源:http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

【讨论】:

  • 是的,但是如何使用上面的代码 sn-p 发送我的请求参数?
  • stackoverflow.com/a/18052417/4854450,但是对于 API 的请求,最好使用 Retrofit 和 GSON,它比 Volley 和 ASyncTask 更快。
【解决方案2】:

检查您的 JSON 时,格式错误,您错过了双引号。

[
 "Type",
 {
  "User": "email /** you missed double quote here **/,
  "password": "dimmer",

 }
]

【讨论】:

  • 我已经更正了,错误是在自己发出 json 数组请求时
  • 实际错误是在制作 jsonarrayrequest 时尚未解决
【解决方案3】:
JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(Request.Method.POST, Constants.requestUrl, frameJsonArray(),
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                    Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();


            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                hideDialog();
                error.printStackTrace();

            }
        }
);

在 onResponse() 中将 JSONObject 改为 JSONArray

EDIT 出现错误是因为 JsonArrayRequest 中只有一个构造函数,即

public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener){}

来源https://android.googlesource.com/platform/frameworks/volley/+/e7cdf98078bc94a2e430d9edef7e9b01250765ac/src/com/android/volley/toolbox/JsonArrayRequest.java

你正在使用一些带有 5 个参数的构造函数。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多