适配器
public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> { Context context; List<User> users; public SubAdapter(Context context, List<User> users) { this.context = context; this.users = users; } @NonNull @Override public SubViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout, viewGroup, false); SubViewHolder subViewHolder = new SubViewHolder(view); return subViewHolder; } @Override public void onBindViewHolder(@NonNull SubViewHolder subViewHolder, int i) { subViewHolder.text_view.setText(users.get(i).getTitle()); Uri uri = Uri.parse(users.get(i).getImages()); subViewHolder.sim_show_image.setImageURI(uri); } @Override public int getItemCount() { return users.size(); } class SubViewHolder extends RecyclerView.ViewHolder{ private final SimpleDraweeView sim_show_image; private final TextView text_view; public SubViewHolder(@NonNull View itemView) { super(itemView); sim_show_image = itemView.findViewById(R.id.sim_show_image); text_view = itemView.findViewById(R.id.text_view); } } }
Activity
public class MainActivity extends AppCompatActivity implements IConter.IView { @BindView(R.id.recyc_view) RecyclerView recycView; private IConter.IPresenter presenter; ArrayList<ShopBean.DataBean> list = new ArrayList<>(); private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); context = MainActivity.this; presenter = new PresenterImpl(); presenter.attachView(this); presenter.showRequestData(); } @Override protected void onDestroy() { super.onDestroy(); presenter.datachView(this); } @Override public void showData(List<User> users) { GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 2); SubAdapter subAdapter = new SubAdapter(context, users); recycView.setLayoutManager(gridLayoutManager); recycView.setAdapter(subAdapter); } }
App
public class App extends Application { private static App app; private DaoSession daoSession; @Override public void onCreate() { super.onCreate(); app = App.this; DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "Fei"); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); Fresco.initialize(this); } public static App getinstance(){ return app; } public DaoSession getDaoSession() { return daoSession; } }
网络工具类
public class RetrofitUtil { private static RetrofitUtil retrofitUtil; private Retrofit retrofit; private OkHttpClient client; private RetrofitUtil(){ client = new OkHttpClient.Builder() .addInterceptor(new Interceptor()) .connectTimeout(5000, TimeUnit.MILLISECONDS) .readTimeout(5000,TimeUnit.MILLISECONDS) .build(); } public static RetrofitUtil getInstance(){ if(null == retrofitUtil){ synchronized (RetrofitUtil.class){ if(retrofitUtil == null){ return new RetrofitUtil(); } } } return retrofitUtil; } public ApiService getapiService(String beanUrl){ retrofit = new Retrofit.Builder() .client(client) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(beanUrl) .build(); ApiService apiService = retrofit.create(ApiService.class); return apiService; } }
拦截器
public class Interceptor implements okhttp3.Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); String method = request.method(); HttpUrl url = request.url(); Log.i("aaaa",method+"..."+url); Response proceed = chain.proceed(request); return proceed; } }
数据库
@Entity public class User { @Id(autoincrement = true) Long id; @Property String title; @Property String images;
ApiService+contast
public interface ApiService { @GET("api.php/api/Lists/content_lists&version=1.7&token=&type=1&cat=&catid2=&page=1") Observable<ShopBean> getService(@Query("page")String page); }
public static final String URL_STRING = "https://app.tuozhe8.com/api.php/api/Lists/content_lists&version=1.7&token=&type=1&cat=&catid2=&page=1"; public static final String BEAN_STRING = "https://app.tuozhe8.com/";
Mvp
IConter
public interface IConter { public interface IView{ void showData(List<User> userList); } public interface IPresenter<IView>{ void attachView(IView iView); void datachView(IView iView); void showRequestData(); } public interface IModel{ public interface OnCallBackListenter{ void OnCallBack(List<User> userList); } void showResponseData(OnCallBackListenter onCallBackListenter); } }
Model
public class ModelImpl implements IConter.IModel { @SuppressLint("CheckResult") @Override public void showResponseData(final OnCallBackListenter onCallBackListenter) { final UserDao userDao = App.getinstance().getDaoSession().getUserDao(); List<User> users = userDao.loadAll(); if(users.size()>0){ onCallBackListenter.OnCallBack(users); return; }else{ Observable<ShopBean> observable = RetrofitUtil.getInstance().getapiService(Contast.BEAN_STRING).getService("1"); observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<ShopBean>() { @Override public void accept(ShopBean shopBean) throws Exception { List<ShopBean.DataBean> data = shopBean.getData(); ArrayList<User> userArrayList = new ArrayList<>(); for (int i = 0; i<data.size();i++){ String title = data.get(i).getTitle(); String logo = data.get(i).getLogo(); User user = new User(); user.setTitle(title); user.setImages(logo); userArrayList.add(user); } onCallBackListenter.OnCallBack(userArrayList); userDao.insertInTx(userArrayList); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { } }); } } }
Presenter
public class PresenterImpl implements IConter.IPresenter<IConter.IView> { IConter.IView iView; private ModelImpl model; private WeakReference<IConter.IView> iViewWeakReference; private WeakReference<ModelImpl> modelWeakReference; @Override public void attachView(IConter.IView iView) { this.iView = iView; model = new ModelImpl(); iViewWeakReference = new WeakReference<>(iView); modelWeakReference = new WeakReference<>(model); } @Override public void datachView(IConter.IView iView) { iViewWeakReference.clear(); modelWeakReference.clear(); } @Override public void showRequestData() { model.showResponseData(new IConter.IModel.OnCallBackListenter() { @Override public void OnCallBack(List<User> userList) { iView.showData(userList); } }); } }