【问题标题】:Volley GET with parameters带参数的 Volley GET
【发布时间】:2018-02-19 10:29:10
【问题描述】:

我有一个以 JSON 数组格式提供数据的 Web 服务。现在,只需传递 URL 即可获取数据。但现在我想传递一个参数来获取 JSON 响应。此 Web 服务具有 GETPOST 方法。 我尝试使用Volley - Sending a POST request using JSONArrayRequest 回答,但我无法在我的代码中实现它。如果有人能解释一下如何在我的代码中实现这一点,那将非常有帮助。

这就是我的代码的样子

String HTTP_SERVER_URL = "https://192.168.1.7/STUDENTWS/Default.asmx/StudentDataJson?InFacultyID=string";
public void JSON_WEB_CALL(){

    //mSwipeRefreshLayout.setRefreshing(true);

    jsonArrayRequest = new JsonArrayRequest(HTTP_SERVER_URL,



            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

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

                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}



public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

    for(int i = 0; i<array.length(); i++) {

        DataModel GetDataModel = new DataModel();

        JSONObject json = null;
        try {
            json = array.getJSONObject(i);

            GetDataModel.setId(json.getString("STUDENTID"));

            GetDataModel.setPlateNo(json.getString("GRADE"));

            GetDataModel.setPlateCode(json.getString("HOUSE"));


        }
        catch (JSONException e)
        {

            e.printStackTrace();
        }

        DataAdapterClassList.add(GetDataModel);
        mSwipeRefreshLayout.setRefreshing(false);

    }

    recyclerViewadapter = new NewRecyclerViewAdapter(DataAdapterClassList, this);

    recyclerView.setAdapter(recyclerViewadapter);

    if (array.length()!=0) {
        SHOW_ALERT(array);
        sendNotification(recyclerView, array);
    }
}

【问题讨论】:

  • 看看this对你有没有帮助。

标签: android android-volley


【解决方案1】:

要使用参数获取,您应该创建 StringRequest。例如:

RequestQueue queue = Volley.newRequestQueue(context);

StringRequest sr = new StringRequest(Request.Method.GET, "http://headers.jsontest.com/",
  new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
      Log.e("HttpClient", "success! response: " + response.toString());
    }
  },
  new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
      Log.e("HttpClient", "error: " + error.toString());
    }
  })
  {
    @Override
    protected Map<String,String> getParams(){
      Map<String,String> params = new HashMap<String, String>();
      params.put("user","YOUR USERNAME");
      params.put("pass","YOUR PASSWORD");
      return params;
    }
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
      Map<String,String> params = new HashMap<String, String>();
      params.put("Content-Type","application/x-www-form-urlencoded");
      return params;
    }
  };

【讨论】:

  • 我可以用同样的方式发送 JSONArray 请求吗?
  • 对于 JSONArray 或 JSONobject 你可以创建 JsonObjectRequest
  • 如果您希望您的请求以 '[' 标记开头,然后使用 JsonArrayRequest
【解决方案2】:
// for json object
Map<String, String> jsonParams = new HashMap<String, String>();
        jsonParams.put("fullname",fullName);
        jsonParams.put("email",email);
        jsonParams.put("password",password);

// for json array make any list.List will be converted to jsonArray
//     example-----
//     ArrayList<String> jsonParams =new ArrayList();
//     jsonParams.add("Test1")
//     jsonParams.add("Test2")

      JsonObjectRequest objectRequest=new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams), new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "onErrorResponse: ",error );
                Toast.makeText(ActivitySignUp.this,error.getMessage(), Toast.LENGTH_LONG).show();

            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String,String> header=new HashMap<String, String>();
                header.put("Content-Type","application/json");
                return header;
            }
        };

【讨论】:

  • 问题是关于请求 GET 请求。这是一个发送 POST 请求的示例。
【解决方案3】:

如果您想将参数传递给您的服务器,那么您可能想做一个POST 方法,否则.. 如果您只想获取数据,那么GET 方法是最好的方法...还有可以用来传递数据的标头,但是,我不建议使用标头来发送参数……那是眼睛疼

编辑


//设置你的方法POSTGET

JsonObjectRequest(Request.Method.GET(/*here can set to POST too*/), url, null,
    new Response.Listener<JSONObject>() 
    {
        @Override
        public void onResponse(JSONObject response) {   
                        // display response     
            Log.d("Response", response.toString());
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {            
            Log.d("Error.Response", response);
       }
    }
);

【讨论】:

  • 我认为在你的代码中你错过了 Request.Method
猜你喜欢
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
相关资源
最近更新 更多