1、将请求加入请求队列;
2、在队列中找到这个请求处理它;
3、如果以前处理过相同的请求,直接从缓存中拿结果;
4、如果以前没处理过,那么发起网络请求,拿取结果,并将它放入缓存。
public class HttpUtil {
//创建一个Volley的访问队列
public static RequestQueue queue;
public static void getWeather(final Context context){
//1)判断有没有队列
if(queue==null){
//如果没有队列,就创建请求队列
queue = Volley.newRequestQueue(context);
}
//2)创建网络请求
String url = "**********************";
StringRequest request = new StringRequest(url, new Listener<String>() {
@Override
public void onResponse(String result) {
//TODO 网络访问成功后,会调用该方法
//onResponse方法是在主线程上调用的
//Log.d("TAG", result);
//使用Gson,将result转为MyWeather对象
Gson gson = new Gson();
MyWeather myweather = gson.fromJson(result, MyWeather.class);
Log.d("TAG",myweather.toString());
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
//网络访问失败后,会调用该方法
//onErrorResponse是在主线程上调用的
Toast.makeText(context, "网络繁忙,稍后重试", Toast.LENGTH_SHORT).show();
}
});
//3)需要把网络访问请求对象放入队列中
queue.add(request);
}
}
另:Gson解析时,实体类的编写格式示例:
注意:变量名要和json的相应的key名完全一致
public class MyWeather {
String reason;
Result result;
int error_code;
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public int getError_code() {
return error_code;
}
public void setError_code(int error_code) {
this.error_code = error_code;
}
@Override
public String toString() {
return "MyWeather [reason=" + reason + ", result=" + result
+ ", error_code=" + error_code + "]";
}
public static class Result{
Data data;