一、框架介绍
1、Volley
Google I/O 2013上发布的用于Android平台的网络通信库,能使网络通信更快、更简单、更健壮。实际使用下来,确实感受非常好,如官方所说。他提供了如下的便利功能:
JSON,图像等的异步下载;
网络请求的优先级处理
网络请求的排序
缓存
多级别取消请求
2、GreenDao
目前android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。 综合了网上的各种评价,greenDAO的运行效率最高,内存消耗最少,性能最佳,支持一对多,多对多,且无需涉及sql语言。因此决定采用greenDAO框架,对项目的orm框架进行改进。
该框架也是出自Google,无需annotation就可以轻松将实体序列化,同时又可以通过annotation来灵活配置需要序列化的字段。
二、整合
通过Volley获取服务器数据,通过gson将json数据转换成实体,通过GreenDao直接将实体存入sqlite数据库,使用时可直接从sqlite取出实体类。整个流程无需接触通信,数据库操作,且全部为实体操作,完全为java的编程习惯。
1、Volley
Google I/O 2013上发布的用于Android平台的网络通信库,能使网络通信更快、更简单、更健壮。实际使用下来,确实感受非常好,如官方所说。他提供了如下的便利功能:
JSON,图像等的异步下载;
网络请求的优先级处理
网络请求的排序
缓存
多级别取消请求
和Activity和生命周期的联动
下载:git clone https://android.googlesource.com/platform/frameworks/volley
2、GreenDao
目前android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。 综合了网上的各种评价,greenDAO的运行效率最高,内存消耗最少,性能最佳,支持一对多,多对多,且无需涉及sql语言。因此决定采用greenDAO框架,对项目的orm框架进行改进。
下载:git clone https://github.com/greenrobot/greenDAO.git
该框架也是出自Google,无需annotation就可以轻松将实体序列化,同时又可以通过annotation来灵活配置需要序列化的字段。
二、整合
通过Volley获取服务器数据,通过gson将json数据转换成实体,通过GreenDao直接将实体存入sqlite数据库,使用时可直接从sqlite取出实体类。整个流程无需接触通信,数据库操作,且全部为实体操作,完全为java的编程习惯。
1、使用Volley、GreenDao从服务器获取数据转换成实体
一个简单request请求,该请求返回的是一个json对象
mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
new Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "response : " + response.toString());
}
}, null));
mQueue.start();
现在我们需要修改让其直接返回实体对象,首先需要一个GsonRequest,来处理返回的数据,将其转换成我们所要的对象import java.io.UnsupportedEncodingException;
import java.util.Map;
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;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
public class GsonRequest<T> extends Request<T> {
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Listener<T> listener;
/**
* Make a GET request and return a parsed object from JSON.
*
* @param url
* URL of the request to make
* @param clazz
* Relevant class object, for Gson's reflection
* @param headers
* Map of request headers
*/
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers,
Listener<T>