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. UITableView属性 自己定义UITableViewCell

    UITableView的属性全齐.供大家參考 附:http://www.bubuko.com/infodetail-561085.html //曾经在使用UITableView的时候,总是在cell上 ...

  2. 0x02 枚举、模拟、递推

    1.TYVJ1266(这站是不是已经倒闭了啊) USACO陈年老题,对于这种开关问题啊,最多只按一次,而且第一行随便按完下面的就全确定了,类似的还有固定翻转一个长度的区间,这个也是最多翻一次的而且翻的 ...

  3. POJ 3411 DFS

    大致题意: 有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱.求的是最少 ...

  4. .NET中的异步操作及线程同步

    执行异步操作 CLR使用了WIN的线程处理能力,但保留了与其分离的权利.某些时候CLR的线程与Win的线程不是完全的匹配. 线程的系统开销较大,应限制其数量. 创建:分配并初始化一线程内核对象,保留1 ...

  5. GradientDrawable类的利用动态设置样式中的颜色

    1.xml样式文件 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=& ...

  6. Android dex ,xml 文件反编译方法

    Dex 文件是Android上运行于delvik的java二进制文件,如果你对其中的内容感兴趣而开发人员没有公布源代码,你可以用如下方法反编译dex文件: 1 解压system.img 用xyaffs ...

  7. APUE学习笔记7——进程间通信

    1 管道 管道一般是一种半双工的进程间通信方式,只能够在具有公共祖先的进程之间使用,比如一个管道由一个进程创建,然后该进程调用fork,之后父.子进程就可以使用该管道. 管道是调用pipe函数创建的. ...

  8. UVa 11729 Commando War 【贪心】

    题意:有n个部下,交待每个部下完成他相应的任务需要bi的时间,然后完成这项任务需要ji的时间, 选择交待任务的顺序,使得总的花费的时间最少 因为不管怎么样,交待所需要的n*bi的时间都是要花费的, 然 ...

  9. PHP小常识分享

    PHP 标记 当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码.此种解析方式使得 PHP 可以被嵌入到各种不同的文 ...

  10. table标签 在谷歌和ie浏览器下不同的表现效果

    在项目中有了一个这样的需求: 我需要利用vue的模板语法v-for循环生成tr,这个tr是需要双重循环来确定其个数的, 我的实现: 我在tr外面包了一个template标签, 效果: 谷歌浏览器下实现 ...