MyData
package com.example.day_05_greendao_test.bean;
import java.util.List;
public class MyData {
private int code;
private String msg;
private List<NewslistBean> newslist;
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 List<NewslistBean> getNewslist() {
return newslist;
}
public void setNewslist(List<NewslistBean> newslist) {
this.newslist = newslist;
}
}
NewslistBean
package com.example.day_05_greendao_test.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;
@Entity
public class NewslistBean {
@Id(autoincrement = true)
private Long id;
private String ctime;
private String title;
private String description;
private String picUrl;
private String url;
@Generated(hash = 1402622097)
public NewslistBean(Long id, String ctime, String title, String description,
String picUrl, String url) {
this.id = id;
this.ctime = ctime;
this.title = title;
this.description = description;
this.picUrl = picUrl;
this.url = url;
}
@Generated(hash = 923354944)
public NewslistBean() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getCtime() {
return this.ctime;
}
public void setCtime(String ctime) {
this.ctime = ctime;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPicUrl() {
return this.picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return "NewslistBean{" +
"id=" + id +
", ctime='" + ctime + '\'' +
", title='" + title + '\'' +
", description='" + description + '\'' +
", picUrl='" + picUrl + '\'' +
", url='" + url + '\'' +
'}';
}
}
dao
OkHttpUtils
package com.example.day_05_greendao_test.utils;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.CacheControl;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtils {
private OkHttpClient mOkHttp;
private Cache mCache;
private MyCallBack myCallBack;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
myCallBack.onError(msg.obj.toString());
break;
case 1:
myCallBack.onSuccess(msg.obj.toString());
break;
}
}
};
private OkHttpUtils() {
File file = new File(Environment.getExternalStorageDirectory() + "/memeda");
if (!file.exists()) {
file.mkdir();
}
mCache = new Cache(file, 1024 * 1024 * 2);
//日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
mOkHttp = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.cache(mCache)
.build();
}
static class OkHttpHolder {
private final static OkHttpUtils ok = new OkHttpUtils();
}
public static OkHttpUtils getInstance() {
return OkHttpHolder.ok;
}
public void asyncGetInfo(String url,MyCallBack myCallBack){
this.myCallBack = myCallBack;
Request request = new Request.Builder().url(url)
//添加缓存 缓存两小时 Okhttp的源吗也是用DiskLruCache
.cacheControl(new CacheControl.Builder().maxStale(60*60*2,TimeUnit.SECONDS).build())
.build();
mOkHttp.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mHandler.sendMessage(mHandler.obtainMessage(0,e.getMessage()));
}
@Override
public void onResponse(Call call, Response response) throws IOException {
mHandler.sendMessage(mHandler.obtainMessage(1,response.body().string()));
}
});
}
//最终版异步Post
public void lastAsyncPost(String url, Map<String,String> map, final MyCallBack myCallBack){
this.myCallBack = myCallBack;
FormBody.Builder form = new FormBody.Builder();
for (String key:map.keySet()){
form.add(key,map.get(key));
}
FormBody body = form.build();
Request request = new Request.Builder().url(url).method("POST",body).build();
mOkHttp.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mHandler.sendMessage(mHandler.obtainMessage(1, e.getMessage()));
}
@Override
public void onResponse(Call call, Response response) throws IOException {
mHandler.sendMessage(mHandler.obtainMessage(0, response.body().string()));
}
});
}
//上传图片
public void uploadImage(String url,MyCallBack myCallBack){
File file = new File(Environment.getExternalStorageDirectory()+"/Pictures/dream.jpg");
Log.e("filename",file.getName());
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
//添加参数 参数1:接口参数的key 参数2:上传文件的名字,参数3:请求体里面两个参数 参数1:声明你上传的格式参数2:具体某个文件
.addFormDataPart("image","dream.jpg",RequestBody.create(MediaType.parse("image/jpg"), file)).build();
Request request = new Request.Builder().method("POST",requestBody)
.addHeader("userId","5953")
.addHeader("sessionId","15601336197575953").url(url).build();
mOkHttp.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mHandler.sendMessage(mHandler.obtainMessage(1, e.getMessage()));
}
@Override
public void onResponse(Call call, Response response) throws IOException {
mHandler.sendMessage(mHandler.obtainMessage(0, response.body().string()));
}
});
}
public interface MyCallBack{
void onSuccess(String success);
void onError(String error);
}
}
MainActivity
package com.example.day_05_greendao_test;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.example.day_05_greendao_test.bean.MyData;
import com.example.day_05_greendao_test.bean.NewslistBean;
import com.example.day_05_greendao_test.dao.NewslistBeanDao;
import com.example.day_05_greendao_test.utils.OkHttpUtils;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private NewslistBeanDao mListDao;
private List<NewslistBean> mList = new ArrayList<>();
private String mUrl = "http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListDao = MyApplication.getDaoSession().getNewslistBeanDao();
if (mListDao.loadAll().size()>0){
mList.addAll(mListDao.loadAll());
Toast.makeText(this, "走缓存", Toast.LENGTH_SHORT).show();
Log.e("缓存数据",mList.toString());
}else {
OkHttpUtils.getInstance().asyncGetInfo(mUrl, new OkHttpUtils.MyCallBack() {
@Override
public void onSuccess(String success) {
Gson gson = new Gson();
MyData myData = gson.fromJson(success, MyData.class);
List<NewslistBean> newslist = myData.getNewslist();
mListDao.insertInTx(newslist);
mList.addAll(mListDao.loadAll());
Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(String error) {
}
});
}
}
}
MyApplication
package com.example.day_05_greendao_test;
import android.app.Application;
import com.example.day_05_greendao_test.dao.DaoMaster;
import com.example.day_05_greendao_test.dao.DaoSession;
public class MyApplication extends Application {
private static DaoSession mDaoSession;
@Override
public void onCreate() {
super.onCreate();
initDao();
}
private void initDao(){
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"test.db");
mDaoSession = new DaoMaster(helper.getWritableDatabase()).newSession();
}
public static DaoSession getDaoSession(){
return mDaoSession;
}
}