model
public class ClaModel implements IContance.IClaModel {
@Override
public void clalist(HashMap<String, String> params, final IClaModelCallBack callBack) {
OkHttpUtils.getmInstance().doGet(Api.urls, new OKHttpCallBack() {
@Override
public void success(String url) {
callBack.success(url);
}
@Override
public void error(String msg) {
callBack.error(msg);
}
});
}
public interface IClaModelCallBack{
void success(String url);
void error(String msg);
}
}
presenter
public class ClaPresenter extends IContance.IClaPresenter {
private IContance.IClaView iClaView;
private ClaModel claModel;
public ClaPresenter(IContance.IClaView iClaView) {
this.iClaView = iClaView;
claModel = new ClaModel();
}
@Override
public void clalist(HashMap<String, String> params) {
claModel.clalist(params, new ClaModel.IClaModelCallBack() {
@Override
public void success(String url) {
iClaView.success(url);
}
@Override
public void error(String msg) {
iClaView.error(msg);
}
});
}
public void destory(){
iClaView=null;
}
}
contance
public interface IContance {
abstract class IClaPresenter{
public abstract void clalist(HashMap<String,String>params);
}
interface IClaModel{
void clalist(HashMap<String,String>params, ClaModel.IClaModelCallBack callBack);
}
interface IClaView{
void success(String url);
void error(String msg);
}
}
okHttpCallBack
public interface OKHttpCallBack {
void success(String url);
void error(String msg);
}
OkHttpUtils
public class OkHttpUtils {
private OkHttpClient okHttpClient;
private static OkHttpUtils mInstance;
private Handler handler = new Handler();
public static OkHttpUtils getmInstance(){
if (mInstance == null){
synchronized (OkHttpUtils.class){
if (mInstance == null){
mInstance = new OkHttpUtils();
}
}
}
return mInstance;
}
private OkHttpUtils(){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.writeTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS)
.connectTimeout(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.error("网络异常");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
if (response.code()==200){
handler.post(new Runnable() {
@Override
public void run() {
callBack.success(string);
}
});
}
}
});
}
}
API
public class Api {
public static String urls = "http://www.xieast.com/api/news/news.php?page=1";
}
userbean
直接快速生成
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myvh> {
Context context;
List<UserBean.DataBean>list;
public MyAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<UserBean.DataBean> list) {
this.list = list;
notifyDataSetChanged();
}
@NonNull
@Override
public MyAdapter.Myvh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
return new Myvh(view);
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.Myvh holder, int position) {
holder.text.setText(list.get(position).getTitle());
holder.fres.setImageURI(list.get(position).getThumbnail_pic_s());
}
@Override
public int getItemCount() {
return list.size();
}
public class Myvh extends RecyclerView.ViewHolder {
private final SimpleDraweeView fres;
private final TextView text;
public Myvh(View itemView) {
super(itemView);
fres = itemView.findViewById(R.id.fres_id);
text = itemView.findViewById(R.id.text_id);
}
}
}
MyAdapters
public class MyAdapters extends RecyclerView.Adapter<MyAdapters.Myvh> {
Context context;
List<MyBean>list;
public MyAdapters(Context context) {
this.context = context;
list = new ArrayList<>();
}
public void setList(List<MyBean> list) {
this.list = list;
notifyDataSetChanged();
}
@NonNull
@Override
public MyAdapters.Myvh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
return new Myvh(view);
}
@Override
public void onBindViewHolder(@NonNull MyAdapters.Myvh holder, int position) {
holder.text.setText(list.get(position).getTitle());
holder.fres.setImageURI(list.get(position).getThumbnail_pic_s());
}
@Override
public int getItemCount() {
return list.size();
}
public class Myvh extends RecyclerView.ViewHolder {
private final SimpleDraweeView fres;
private final TextView text;
public Myvh(View itemView) {
super(itemView);
fres = itemView.findViewById(R.id.fres_id);
text = itemView.findViewById(R.id.text_id);
}
}
}
MyBean 数据库
@Entity(nameInDb = "mybean",active = true)
public class MyBean {
@Id(autoincrement = true)
private Long id;
private String title;
private String thumbnail_pic_s;
/** Used to resolve relations */
@Generated(hash = 2040040024)
private transient DaoSession daoSession;
/** Used for active entity operations. */
@Generated(hash = 776570201)
private transient MyBeanDao myDao;
@Generated(hash = 790705984)
public MyBean(Long id, String title, String thumbnail_pic_s) {
this.id = id;
this.title = title;
this.thumbnail_pic_s = thumbnail_pic_s;
}
@Generated(hash = 1281580447)
public MyBean() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
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;
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#delete(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 128553479)
public void delete() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.delete(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#refresh(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 1942392019)
public void refresh() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.refresh(this);
}
/**
* Convenient call for {@link org.greenrobot.greendao.AbstractDao#update(Object)}.
* Entity must attached to an entity context.
*/
@Generated(hash = 713229351)
public void update() {
if (myDao == null) {
throw new DaoException("Entity is detached from DAO context");
}
myDao.update(this);
}
/** called by internal mechanisms, do not call yourself. */
@Generated(hash = 519060065)
public void __setDaoSession(DaoSession daoSession) {
this.daoSession = daoSession;
myDao = daoSession != null ? daoSession.getMyBeanDao() : null;
}
@Override
public String toString() {
return
"id=" + id +
", title='" + title+
", thumbnail_pic_s='" + thumbnail_pic_s
;
}
}
使用锤子 生成
MainActivity主页面
public class MainActivity extends AppCompatActivity implements IContance.IClaView {
private RecyclerView rev;
private MyAdapter adapter;
private ClaPresenter claPresenter;
private MyBeanDao dataBeanDao;
private DaoSession daoMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rev = findViewById(R.id.rev);
rev.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyAdapter(this);
claPresenter = new ClaPresenter(this);
HashMap<String,String>params = new HashMap<>();
claPresenter.clalist(params);
daoMessage = DaoMessage.getInstance(this).getDaoMessage();
dataBeanDao = daoMessage.getMyBeanDao();
boolean connected = NetUtils.isNetworkConnected(this);
if (!connected){
Toast.makeText(this,"没网",Toast.LENGTH_SHORT).show();
List<MyBean> list = dataBeanDao.queryBuilder().build().list();
MyAdapters myAdapters = new MyAdapters(this);
myAdapters.setList(list);
rev.setAdapter(myAdapters);
}else {
Toast.makeText(this,"有网",Toast.LENGTH_SHORT).show();
}
}
@Override
public void success(String url) {
UserBean userBean = new Gson().fromJson(url, UserBean.class);
for (int i = 0; i < userBean.getData().size() ; i++) {
dataBeanDao.insert(new MyBean(null,userBean.getData().get(i).getTitle(),userBean.getData().get(i).getThumbnail_pic_s()));
}
adapter.setList(userBean.getData());
rev.setAdapter(adapter);
}
@Override
public void error(String msg) {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (claPresenter!=null){
claPresenter.destory();
}
}
}
App全局
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//全局
DiskCacheConfig diskCacheConfig =
DiskCacheConfig.newBuilder(this)
.setBaseDirectoryPath(this.getApplicationContext()
.getCacheDir())
.setBaseDirectoryName("com.bwei.work_three")
.setMaxCacheSize(100 * ByteConstants.MB)
.setMaxCacheSizeOnLowDiskSpace(60 * ByteConstants.MB)
.setMaxCacheSizeOnVeryLowDiskSpace(20 * ByteConstants.MB)
.build();
ImagePipelineConfig build = ImagePipelineConfig.newBuilder(this)
.setMainDiskCacheConfig(diskCacheConfig)
.build();
Fresco.initialize(this,build);
Fresco.initialize(this);
}
}
DaoMessAge
public class DaoMessage {
private static DaoMessage daoMessage;
private DaoSession daoSession;
private DaoMessage(Context context){
daoSession = DaoMaster.newDevSession(context, "ch.db");
}
public static DaoMessage getInstance(Context context){
if(daoMessage == null){
synchronized (DaoSession.class){
if(daoMessage==null){
daoMessage = new DaoMessage(context);
}
}
}
return daoMessage;
}
public DaoSession getDaoMessage() {
return daoSession;
}
}
网络判断
public class NetUtils {
public static boolean isNetworkConnected(Context context){
ConnectivityManager manager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo!=null){
return true;
}else {
return false;
}
}
}