Volley的post传值的使用

1.最近公司项目采用Volley来请求数据,长时间没用忘记了。所以在此总结下。我主要总接关于Volley的post请求,传递参数,因为公司项目都是post请求传递参数的。在这里客户端 和服务器都有相应的代码。


2.Volley的使用具体分为四步:

2.1得到RequestQueue ,通过Volley的静态方法newRequestQueue(Context);

2.2调用RequestQueue.start()方法

2.3 声明一个Request (这里我主要演示下StringRequest和JsonObjectRequest )

        2.4 将请求添加到RequestQueue中。(这是很容易忘记的一步)


3..StringRequest post传递参数。

核心代码如下:

public void getData()
{
String url="http://192.168.155.1:8080/Test/request";//自己tomcat的网址
RequestQueue queue=Volley.newRequestQueue(MainActivity.this);
queue.start();
StringRequest request=new StringRequest(Method.POST,url,new Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_SHORT).show();
}
},new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})

{
@Override
protected Map<String, String> getParams() throws AuthFailureError 
{
Map<String, String>map=new HashMap<String, String>();
map.put("cataryID", "1");
map.put("currpage","2");
return map;
}
};
queue.add(request);
}

StringRequest传递参数需要重写  getParams方法。如上代码所示 只需要返回一个map即可。

得到返回的数据,具体解析请看上篇文章 复杂性Json的解析


4.JsonObjectRequest

JsonObjectRequest比较麻烦一点。慕课网老师在讲解Volley的post的时候,说申明一个JsonObjectRequest,用传入map的构造方法。这种方式我想说害人不浅。存在问题。虽然那个老师演示的时候,的确可以。

重写的JsonObjectRequest代码如下:

package main;
import java.io.UnsupportedEncodingException;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import com.android.volley.AuthFailureError;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

public  class JsonObjectPostRequest extends Request<JSONObject>{
	private Map<String,String> mMap;
	private Listener<JSONObject>  mListener;


	public JsonObjectPostRequest(String url,Listener<JSONObject> listener, ErrorListener errorListener,Map map) {
		super(Request.Method.POST, url, errorListener);
		mListener=listener;
		mMap=map;
		
	}
	@Override
	protected Map<String, String> getParams() throws AuthFailureError {

		return mMap;
	}

	   @Override
	    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
	        try {
	            String jsonString =
	                new String(response.data, HttpHeaderParser.parseCharset(response.headers));
	            return Response.success(new JSONObject(jsonString),
	                    HttpHeaderParser.parseCacheHeaders(response));
	        } catch (UnsupportedEncodingException e) {
	            return Response.error(new ParseError(e));
	        } catch (JSONException je) {
	            return Response.error(new ParseError(je));
	        }
	    }

	@Override
	protected void deliverResponse(JSONObject response) {
		mListener.onResponse(response);
		
	}

}


服务端代码:

public class request extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			String value=request.getParameter("currpage");
			System.out.print(value);
			if(Integer.valueOf(value)==2)
			{
				response.sendRedirect("test.json");
			}
		}

}


总结就到这里,上面的代码经本人测试,保证正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值