MVP+Fresco+GreenDao

//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);
}

}

//权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值