无法用齐射

时间:2016-03-25 11:17:51

标签: android android-volley

我试图用排球发出一个帖子请求。

请求参数是一个json数组。

以下是我的请求参数

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

 }
]

我有一个方法frameJsonArray,用于构建上面的json和im发出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;

}

3 个答案:

答案 0 :(得分:2)

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/

答案 1 :(得分:1)

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

编辑因为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个参数的构造函数。

答案 2 :(得分:1)

检查JSON格式错误后,您错过了双重报价。

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

 }
]