//OkHttpCallBack
package mmy.example.com.zkmn1.net;
public interface OkHttpCallBack {
void Success(String result);
void Failure(String msg);
}
//OkHttpUtile
package mmy.example.com.zkmn1.net;
import android.os.Handler;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtile {
private static OkHttpUtile mInstance;
private final OkHttpClient okHttpClient;
private Handler handler = new Handler();
public static OkHttpUtile getInstance(){
if (mInstance == null){
synchronized (OkHttpUtile.class){
if (mInstance == null){
mInstance = new OkHttpUtile();
}
}
}
return mInstance;
}
public OkHttpUtile(){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.build();
}
public void doGet(String url, final OkHttpCallBack callBack){
Request request = new Request.Builder().url(url).get().build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.Failure("网络异常");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.code() == 200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.Success(string);
}
});
}
}
});
}
public void doPost(String url, HashMap<String,String> params, final OkHttpCallBack callBack){
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String,String> map:params.entrySet()){
builder.add(map.getKey(),map.getValue());
}
RequestBody requestBody = builder.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callBack != null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.Failure("网络异常");
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (callBack != null){
if (response.code() == 200){
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
callBack.Success(string);
}
});
}
}
}
});
}
}
//RequestCallBack
package mmy.example.com.zkmn1.net;
public interface RequestCallBack {
void Success(String result);
void Failure(String msg);
}
//LoadContract
package mmy.example.com.zkmn1.contract;
import java.util.HashMap;
import mmy.example.com.zkmn1.net.RequestCallBack;
public interface LoadContract {
public abstract class LoadPresenterIn{
public abstract void BastPresenter(HashMap<String,String> map);
}
interface LoadModelIn{
void BastModel(HashMap<String,String> map, RequestCallBack callBack);
}
interface LoadViewIn{
void BastSuccess(String result);
void BastFailure(String msg);
}
}
//LoadModel
package mmy.example.com.zkmn1.model;
import android.os.Handler;
import java.util.HashMap;
import mmy.example.com.zkmn1.contract.LoadContract;
import mmy.example.com.zkmn1.net.OkHttpCallBack;
import mmy.example.com.zkmn1.net.OkHttpUtile;
import mmy.example.com.zkmn1.net.RequestCallBack;
public class LoadModel implements LoadContract.LoadModelIn {
private Handler handler = new Handler();
String url = “http://www.xieast.com/api/news/news.php?page=1”;
@Override
public void BastModel(HashMap<String, String> map, final RequestCallBack callBack) {
OkHttpUtile.getInstance().doGet(url, new OkHttpCallBack() {
@Override
public void Success(final String result) {
if (callBack != null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.Success(result);
}
});
}
}
@Override
public void Failure(final String msg) {
if (callBack != null){
handler.post(new Runnable() {
@Override
public void run() {
callBack.Failure(msg);
}
});
}
}
});
}
}
//LoadPresenter
package mmy.example.com.zkmn1.presenter;
import java.util.HashMap;
import mmy.example.com.zkmn1.contract.LoadContract;
import mmy.example.com.zkmn1.model.LoadModel;
import mmy.example.com.zkmn1.net.RequestCallBack;
public class LoadPresenter extends LoadContract.LoadPresenterIn {
private LoadContract.LoadViewIn loadViewIn;
private LoadModel loadModel;
public LoadPresenter(LoadContract.LoadViewIn loadViewIn) {
this.loadViewIn = loadViewIn;
loadModel = new LoadModel();
}
@Override
public void BastPresenter(HashMap<String, String> map) {
loadModel.BastModel(map, new RequestCallBack() {
@Override
public void Success(String result) {
if (loadViewIn != null){
loadViewIn.BastSuccess(result);
}
}
@Override
public void Failure(String msg) {
if (loadViewIn != null){
loadViewIn.BastFailure(msg);
}
}
});
}
public void onDestroy(){
loadModel = null;
loadViewIn = null;
}
}
//NetStatus
package mmy.example.com.zkmn1.connet;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
public class NetStatus {
public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
}
//BastAdapter
package mmy.example.com.zkmn1.adapter;
import android.content.Context;
import android.graphics.Paint;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;
import java.util.List;
import mmy.example.com.zkmn1.R;
import mmy.example.com.zkmn1.bean.BastBean;
import mmy.example.com.zkmn1.bean.DataBean;
public class BastAdapter extends RecyclerView.Adapter<BastAdapter.Viewholder>{
private Context context;
private List<DataBean> list;
private final int TYPRONE =1;
private final int TYPETWO =2;
public BastAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<DataBean> list) {
if (list != null) {
this.list = list;
}
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0){
return TYPRONE;
}else {
return TYPETWO;
}
}
@NonNull
@Override
public Viewholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if (i == TYPRONE){
View view = LayoutInflater.from(context).inflate(R.layout.item1, null);
return new Viewholder(view);
}else if (i == TYPETWO){
View view = LayoutInflater.from(context).inflate(R.layout.item2, null);
return new Viewholder(view);
}
return null;
}
@Override
public void onBindViewHolder(@NonNull Viewholder viewholder, int i) {
viewholder.text1.setText(list.get(i).getTitle());
Uri uri = Uri.parse(list.get(i).getThumbnail_pic_s());
viewholder.sdv.setImageURI(uri);
}
@Override
public int getItemCount() {
return list.size();
}
public class Viewholder extends RecyclerView.ViewHolder{
private SimpleDraweeView sdv;
private TextView text1;
public Viewholder(@NonNull View itemView) {
super(itemView);
text1 = itemView.findViewById(R.id.text1);
sdv = itemView.findViewById(R.id.sdv);
}
}
}
//布局
<?xml version="1.0" encoding="utf-8"?><com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="10dp"
app:roundAsCircle="true" />
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp" />
//布局二
<?xml version="1.0" encoding="utf-8"?><com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/sdv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="10dp"
app:roundedCornerRadius="20dp" />
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp" />
//MainActivity
package mmy.example.com.zkmn1;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;
import mmy.example.com.zkmn1.adapter.BastAdapter;
import mmy.example.com.zkmn1.bean.BastBean;
import mmy.example.com.zkmn1.bean.DataBean;
import mmy.example.com.zkmn1.connet.NetStatus;
import mmy.example.com.zkmn1.contract.LoadContract;
import mmy.example.com.zkmn1.greendao.DaoMaster;
import mmy.example.com.zkmn1.greendao.DaoSession;
import mmy.example.com.zkmn1.greendao.DataBeanDao;
import mmy.example.com.zkmn1.presenter.LoadPresenter;
public class MainActivity extends AppCompatActivity implements LoadContract.LoadViewIn {
private RecyclerView recyclerView;
private LoadPresenter loadPresenter;
private BastAdapter bastAdapter = new BastAdapter(this);;
DaoSession daoSession;
DataBeanDao dataBeanDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
daoSession = DaoMaster.newDevSession(this,DataBeanDao.TABLENAME);
dataBeanDao = daoSession.getDataBeanDao();
recyclerView = findViewById(R.id.recyclerView);
loadPresenter = new LoadPresenter(this);
loadPresenter.BastPresenter(new HashMap<String, String>());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
NetStatus netStatus=new NetStatus();
boolean networkConnected = netStatus.isNetworkConnected(this);
final List<DataBean> dataBeans = dataBeanDao.loadAll();
if (!networkConnected){
if (dataBeans.size()!=0) {
bastAdapter.setList(dataBeans);
recyclerView.setAdapter(bastAdapter);
}
}
}
@Override
public void BastSuccess(String result) {
BastBean bastBean = new Gson().fromJson(result, BastBean.class);
for (int i = 0; i < bastBean.getData().size(); i++) {
dataBeanDao.insert(new DataBean(null,bastBean.getData().get(i).getUniquekey(),bastBean.getData().get(i).getTitle(),bastBean.getData().get(i).getDate(),bastBean.getData().get(i).getCategory(),bastBean.getData().get(i).getAuthor_name(),bastBean.getData().get(i).getUrl(),bastBean.getData().get(i).getThumbnail_pic_s(),bastBean.getData().get(i).getThumbnail_pic_s02(),bastBean.getData().get(i).getThumbnail_pic_s03()));
}
bastAdapter.setList(bastBean.getData());
recyclerView.setAdapter(bastAdapter);
}
@Override
public void BastFailure(String msg) {
}
@Override
protected void onDestroy() {
super.onDestroy();
loadPresenter.onDestroy();
}
}
//布局
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
//Applica
package mmy.example.com.zkmn1.app;
import android.app.Application;
import android.os.Environment;
import com.facebook.cache.disk.DiskCacheConfig;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import java.io.File;
public class Applica extends Application {
@Override
public void onCreate() {
super.onCreate();
//高级初始化-配置缓存文件夹
DiskCacheConfig cacheConfig = DiskCacheConfig.newBuilder(this)
.setBaseDirectoryName("fresco_images")
.setBaseDirectoryPath(Environment.getExternalStorageDirectory())
.build();
//设置磁盘缓存的配置,生成配置文件
ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(cacheConfig)
.build();
Fresco.initialize(this,config);
}
}
//DataBean
package mmy.example.com.zkmn1.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
@Entity
public class DataBean {
@Id(autoincrement = true)
private Long id;
private String uniquekey;
private String title;
private String date;
private String category;
private String author_name;
private String url;
private String thumbnail_pic_s;
private String thumbnail_pic_s02;
private String thumbnail_pic_s03;
@Generated(hash = 1107919271)
public DataBean(Long id, String uniquekey, String title, String date,
String category, String author_name, String url, String thumbnail_pic_s,
String thumbnail_pic_s02, String thumbnail_pic_s03) {
this.id = id;
this.uniquekey = uniquekey;
this.title = title;
this.date = date;
this.category = category;
this.author_name = author_name;
this.url = url;
this.thumbnail_pic_s = thumbnail_pic_s;
this.thumbnail_pic_s02 = thumbnail_pic_s02;
this.thumbnail_pic_s03 = thumbnail_pic_s03;
}
@Generated(hash = 908697775)
public DataBean() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getUniquekey() {
return this.uniquekey;
}
public void setUniquekey(String uniquekey) {
this.uniquekey = uniquekey;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public String getCategory() {
return this.category;
}
public void setCategory(String category) {
this.category = category;
}
public String getAuthor_name() {
return this.author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public String getThumbnail_pic_s() {
return this.thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getThumbnail_pic_s02() {
return this.thumbnail_pic_s02;
}
public void setThumbnail_pic_s02(String thumbnail_pic_s02) {
this.thumbnail_pic_s02 = thumbnail_pic_s02;
}
public String getThumbnail_pic_s03() {
return this.thumbnail_pic_s03;
}
public void setThumbnail_pic_s03(String thumbnail_pic_s03) {
this.thumbnail_pic_s03 = thumbnail_pic_s03;
}
}
//LoadContract
package mmy.example.com.zkmn1.contract;
import java.util.HashMap;
import mmy.example.com.zkmn1.net.RequestCallBack;
public interface LoadContract {
public abstract class LoadPresenterIn{
public abstract void BastPresenter(HashMap<String,String> map);
}
interface LoadModelIn{
void BastModel(HashMap<String,String> map, RequestCallBack callBack);
}
interface LoadViewIn{
void BastSuccess(String result);
void BastFailure(String msg);
}
}
//权限