Volley GET带参数

时间:2018-02-19 10:29:10

标签: android android-volley

我有一个Web服务,它以JSON数组格式提供数据。现在只需传递URL即可获取数据。但现在我想传递一个参数来获取JSON响应。此网络服务有GET& POST方法。 我尝试了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);
    }
}

3 个答案:

答案 0 :(得分:1)

for get with param you should create StringRequest. for Example  
RequestQueue queue = Volley.newRequestQueue(context);

enter code here

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;
    }
  };

答案 1 :(得分:1)

// 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;
            }
        };

答案 2 :(得分:0)

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

修改

//设置方法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);
       }
    }
);