1.回想

上篇学习了android 通过 volley 网络通信框架 实现 请求图片的三种方法!

2.重点

(1)复习和熟悉 StringRequest ,JsonObjectRequest 方法

(2)自己定义 GsonRequest : 实现 gson的调用 ,直接将请求字符串封装为对象

3.准备

3.1 gson.jar 包 免积分下载:

http://download.csdn.net/detail/lablenet/9026319

3.2 Json字符串例如以下:

{
"code":1,
"msg":"success",
"data":{
"id":"1",
"tname":"电影",
"addtime":"1439809489",
"name":"机器人帝国",
"note":"三年前,外星机器人入侵地球,经过七天的战斗地球被全然占据。从此之后。机器人对人类严加看管,它们向人类头上安装了定位系统,一旦检測到人类走出家门便将其毁灭。除此之外,外星人雇佣罗宾(本·金斯利 Ben Kingsley 饰)等人类叛徒担任辅助管理工作。罗宾迷恋漂亮的妇人凯特(吉莲·安德森 Gillian Anderson 饰),但凯特仅仅痴心等待失踪的丈夫归来。 罗宾口口声声称凯特的丈夫早已遇害。只是她的儿子西恩(Callan McAuliffe 饰)并不相信,男孩始终未放弃寻找父亲的努力。某天,西恩意外和康纳(Milo Parker 饰)等伙伴发现令定位系统失效的办法。 孩子们尝试着走出家门,这一变故也让推翻机器人的统治成为可能… 机器人帝国机器人帝国机器人帝国机器人帝国机器人帝国机器人帝国机器人帝国机器人帝国",
"pic":"image/2015080601.jpg",
"url":"magnet:?xt=urn:btih:ed23cbd4377dc8c977c86acb8556085a0bba36de&tr=http://bt.mp4ba.com:2710/announce"
}
}

3.3 实现 Model对象

(1)标准化 对象 :sharedIfo

包括 code , msg ,data (不懂得看我文章:安卓通信数据标准化

package com.example.model;

public class sharedIfo {

	private int code;
private String msg;
private shared data; public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public shared getData() {
return data;
}
public void setData(shared data) {
this.data = data;
} }

(2)shared 数据对象

package com.example.model;

public class shared {

	private int id;
@Override
public String toString() {
return "shared [id=" + id + ", tname=" + tname + ", addtime=" + addtime
+ ", name=" + name + ", note=" + note + ", pic=" + pic
+ ", url=" + url + "]";
}
private String tname;
private String addtime;
private String name;
private String note;
private String pic;
private String url; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public String getAddtime() {
return addtime;
}
public void setAddtime(String addtime) {
this.addtime = addtime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
} }

4. 实现 GsonRequset<T> 类

通过继承 Request<T> ,实现 里面的方法 , 及构造函数的加入,来实现:

package com.example.volleyHttp;

import java.io.UnsupportedEncodingException;

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;
import com.google.gson.Gson; /**
* 自己定义 请求方法
* @author yuan
* http://blog.csdn.net/guolin_blog/article/details/17612763
* @param <T>
*/
public class GsonRequest<T> extends Request<T> { private Listener<T> glistener; private Gson gson; private Class<T> gClass; /**
* 构造函数 。能够有多个不同參数的,这里就不加入了!
* @param method
* @param url
* @param listener
*/
public GsonRequest(int method, String url,Class<T> clazz,Listener<T> listener,ErrorListener errorlistener) {
super(method, url, errorlistener);
//初始化 參数
gson=new Gson();
gClass=clazz;
glistener=listener;
} @Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
//将字符流转成字符串,而且设置 字符编码 ,来自响应信息的报文都不信息
String jsonString=new String(response.data,HttpHeaderParser.parseCharset(response.headers)); //返回信息 使用 gson 直接转 对象。第二个參数 设置编码
return Response.success(gson.fromJson(jsonString, gClass),HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) {
// 出错的时候,将错误信息又一次调出
return Response.error(new ParseError(e));
}
} @Override
protected void deliverResponse(T response) {
// TODO Auto-generated method stub
glistener.onResponse(response);
} }

5.实现调用

和 StringRequest 等 非常一样,实现构造函数传參数就可以。

成功后:返回的sharedIfo对象,能够 操作;(须要自己理解)

	   /**
* //自己定义Request :使用 gson 直接将 json转换为对象
* //使用自己定义Request 的方式 来请求数据
*/
private void gsonRequset_get(){ GsonRequest<sharedIfo> gsonRequest=new GsonRequest<sharedIfo>(Method.GET,HttpPath.getSharedIfo(1),
sharedIfo.class,new Listener<sharedIfo>() { @Override
public void onResponse(sharedIfo response) {
//成功 ,開始 获得sharedIfo对象
//直接转 成 shared对象
shared ifo=response.getData(); tv.setText( response.getCode()
+" | "+response.getMsg()
+" | "+ifo.toString()); networkImageview_get(ifo.getPic()); }
},new Response.ErrorListener() { @Override
public void onErrorResponse(VolleyError error) {
tv.setText(error.getMessage()); }
}); gsonRequest.setTag("gsonRequset");
volleyApplication.getQueue().add(gsonRequest); }

6.总结

总的来说,volley实现和用起来十分的方便,非常适合用在开发中!

7.demo  免积分下载

http://download.csdn.net/detail/lablenet/9027783

Android-Volley网络通信框架(自己定义Request 请求:实现 GsonRequest)的更多相关文章

  1. Android开发之Volley网络通信框架

    今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下用法.方便以后VC. Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮.) 功能模块: 1. JSON, ...

  2. Android应用框架-Volley网络通信框架

    1.Volley简介: Volley是Google 推出的 Android 异步网络请求框架和图片加载框架. 在 Google I/O 2013 大会上发布. 2.Volley特点 扩展性强. And ...

  3. Android 利用an框架快速实现网络请求(含下载上传文件)

    作者:Bgwan链接:https://zhuanlan.zhihu.com/p/22573081来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架是完全 ...

  4. Volley网络通信框架

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  5. Volley(二)—— 基本Request对象 & RequestQueue&请求取消

    详细解读Volley(一)—— 基本Request对象 & RequestQueue&请求取消 Volley它非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作, ...

  6. Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

    1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...

  7. Android 学习笔记之Volley开源框架解析(二)

    PS:Volley已经学完,可以安心的写一下博客总结一下了... 学习内容: 1.Request的完整封装... 2.RetryPolicy,DefaultRetryPolicy(请求重试策略源码解析 ...

  8. 详细解读Volley(一)—— 基本Request对象 & RequestQueue

    Volley它非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕.所以不建议用它去进行下载文件.加载大图的操作.有人可能会问,如 ...

  9. Android 网络通信框架Volley简介(Google IO 2013)

    1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...

随机推荐

  1. html与JacaScript中的重要思想:预留后路、向后兼容、js分离

    以一个简单的web程序为例 详细设计模式请配合代码及凝视食用 <!DOCTYPE html> <!-- 1 预留退路:假设用户禁用了js.链接还能正常显示吗?(href) 2 分离j ...

  2. c3---scanf

    #include <stdio.h> int main(int argc, const char * argv[]) { // 要求: 存储用户输入的整数 // 1.用户输入的整数确定吗? ...

  3. Caffe C++API 提取任意一张图片的特征系列二----MemoryData

    介绍一种更加灵活的方法,用MemoryData层输入数据,可以直接用opencv接口读入我们的图片再添加的网络中.  第一个问题:仍然是工程建立问题,提示卷积层或其他层没有注册,解决方法与上一篇博客一 ...

  4. BZOJ 2821 分块+二分

    题意: N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次. 思路: 把N个数分成sqrt(n)块,预处理d[i][j]表示第i块起点到第j块末尾的答案 枚举起点i,并维护一个数组记录每个数到 ...

  5. 想写一个 Sketch 插件 结果 一查不可收拾 ~~ 涉及到 Symbol 符号/ Layer 图层 / Overrides 可替换变量 等等

    var sketch = context.api() var document = sketch.selectedDocument; var selection = document.selected ...

  6. 关于Angular官网《英雄指南》教程几点问题修正(此问题在2018年4月份有效,以后可能就订正了)

    1.官网中在导入“of”关键字时的引用为: import { Observable, of } from 'rxjs'; 应该改为: import { Observable } from 'rxjs/ ...

  7. jQuery应用实例3:鼠标经过显示离开隐藏

    效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  8. Android Finalizing a Cursor that has not been deactivated or closed

    问题描述: 使用Sqlite数据库时,有时候会报下面的异常: Finalizing a Cursor that has not been deactivated or closed 一个光标没有被停用 ...

  9. CentOS 7.1 下载,安装,配置

    CentOS(全称 Community Enterprise Operating System)是 RHEL 源代码再编译的产物. 2014年初,CentOS 宣布加入 Red Hat. CentOS ...

  10. 「JavaSE 重新出发」05.03.01 利用反射分析类

    在 java.lang.reflect 包中有三个类 Field, Method 和 Constructor 分别用于描述类的域.方法和构造器. Class 类中的 getFields, getMet ...