一、准备工作
1.1 AS下面导入Volley.jar
获取volley.jar的路径:volley.jar下载地址
将volley粘贴到libs下
右键选择 Add to Library.
然后就可以运用volley了。
1.2 在AndroidManifest.xml文件下添加网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
二、JsonRequest请求服务器端
在开发中,经常会用到JSON来传输数据,Volley提供了两种请求分别来实现Json的请求和返回,分别是JsonObjectRequest和JsonArrayRequest.这两个类分别是JsonRequst的实现类。
jsonRequest请求,提交的是json字符串,返回的也是对象的json数据。因此服务器端,在接收请求数据时候,也需要相应解析json数据。
1.1 JsonObjectRequest请求数据。
—|客户端请求代码:
/**
* 通过userid访问服务器,获取用户的信息
* @param userid
* @return
*/
private void getUserNetWork(String userid){
String url = URLAddress.getURLPath("SelectUserSer");
Map<String,String> map = new HashMap<>();
map.put("userid",userid);
JSONObject obj = new JSONObject(map);
VolleyUtil.sendJsonObjectRequest(this, url, obj, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try {
if(jsonObject!=null){ //获取数据,并封装成User对象
User u = new User();
u.setUserName(jsonObject.getString("userid"));
u.setName(jsonObject.getString("name"));
u.setClassGrade(jsonObject.getString("classGrade"));
Message msg = new Message();
msg.obj = u;
msg.what = userInfo;
mHandler.sendMessage(msg);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
ToastUtil.toast(MainActivity.this,"网络访问异常");
}
});
}
}
—|服务器端对象Servlet接收解析:
主要是通过
String userid = IOUtils.toString(request.getInputStream())
获取json格式的String类型数据。然后进行json解析。
package qb.android.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
import qb.entity.User;
import qb.service.UserService;
/**
* Android端接口
* 通过用户id获取用户的信息
* @author admin
*
*/
public class SelectUserSer extends SuperServlet {
private UserService us;
@Override
public void init() throws ServletException {
super.init();
us = new UserService();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
super.doPost(request, response);
String userid = IOUtils.toString(request.getInputStream(),"utf-8");
JSONObject jo = new JSONObject(userid);
User user =us.selectById(jo.getString("userid"));
//将user对象解析成JsonObject对象
out.print(parseToJsonObject(user));
}
private String parseToJsonObject(User u){
JSONObject jo = new JSONObject();
jo.put("userid", u.getUserid()); //学号
jo.put("name", u.getUsername());
jo.put("classGrade", u.getUserclass());
return jo.toString();
}
}
1.2 JsonArrayRequest访问服务器
JsonArrayRequest访问服务器需要返回JsonArray的数据。需要用集合来接收。
private void getTestPaper(int pageNum){
String url = URLAddress.getURLPath("SelectAllTestPaperSer");
VolleyUtil.sendJsonArrayRequest(this, url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
Log.i(TAG,"访问成功"+jsonArray);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i(TAG,"访问失败"+volleyError.toString());
}
});
}
以上代码是我已经将volley再次封装,然后直接调用的结果。这里主要是想说明,volley提交数据,用到的两个jsonRequest请求的操作过程。
后面会将这些源码放到github中。