monizk2
//依賴
implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' //implementation 'com.android.support:design:27.+' implementation 'com.squareup.retrofit2:converter-gson:2.0.2' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2:rxjava:2.0.2' implementation 'com.squareup.retrofit2:retrofit:2.0.2' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' implementation 'org.greenrobot:greendao:3.2.2' implementation 'com.facebook.fresco:fresco:0.12.0' // 在 API < 14 上的機(jī)器支持 WebP 時(shí),需要添加 implementation 'com.facebook.fresco:animated-base-support:0.12.0'// 支持 GIF 動圖,需要添加 implementation 'com.facebook.fresco:animated-gif:0.12.0' implementation 'com.jcodecraeer:xrecyclerview:1.5.9'// 支持 WebP (靜態(tài)圖+動圖),需要添加 implementation 'com.facebook.fresco:animated-webp:0.12.0' implementation 'com.facebook.fresco:webpsupport:0.12.0' configurations.all {resolutionStrategy.eachDependency { DependencyResolveDetails details ->def requested = details.requestedif (requested.group == 'com.android.support') {if (!requested.name.startsWith("multidex")) {details.useVersion '27.1.1'}}} }//Utils
package com.example.ggq.gaoguoqingzhoukao2.utils;import android.util.Log; import com.example.ggq.gaoguoqingzhoukao2.api.api; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory;public class HttpUtils {//成員變量private static HttpUtils httpUtils;private OkHttpClient okHttpClient;//私有構(gòu)造private HttpUtils(){okHttpClient=new OkHttpClient.Builder().addInterceptor(new longinterceptor()).build();}//攔截器方法class longinterceptor implements Interceptor{@Overridepublic Response intercept(Chain chain) throws IOException {//請求對象Request request = chain.request();//創(chuàng)建方法String method = request.method();//添加日志信息Log.i("xxx",method+"");//接收鋪對象Response response = chain.proceed(request);return response;}}//單例模式public static HttpUtils getinstance(){if (httpUtils==null){synchronized (HttpUtils.class){if (httpUtils==null){httpUtils=new HttpUtils();}}}return httpUtils;}public api getpost(String base){Retrofit retrofit = new Retrofit.Builder().client(okHttpClient)//添加拼接地址.baseUrl(base)//添加retrofit對RXjava 的支持.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加gson對象.addConverterFactory(GsonConverterFactory.create()).build();//獲取接口api api = retrofit.create(api.class);return api;} }/契約接口
package com.example.ggq.gaoguoqingzhoukao2.mvp;import com.example.ggq.gaoguoqingzhoukao2.bean.work; import java.util.List;public interface icontract {public interface iview{void showdata(List<work> works);}public interface ipresenter<iview>{//關(guān)聯(lián)void attachview(iview iview);//取消void detachview(iview iview);//邏輯方法void requestinfo();}public interface imoudel{//接口public interface oncalllisten{//請求方法void responsemsg(List<work> works);}//方法void requestdata(oncalllisten oncalllisten);} } //model實(shí)現(xiàn)類 package com.example.ggq.gaoguoqingzhoukao2.mvp;import com.example.ggq.gaoguoqingzhoukao2.api.api; import com.example.ggq.gaoguoqingzhoukao2.app.app; import com.example.ggq.gaoguoqingzhoukao2.bean.news; import com.example.ggq.gaoguoqingzhoukao2.bean.work; import com.example.ggq.gaoguoqingzhoukao2.bean.workDao; import com.example.ggq.gaoguoqingzhoukao2.constant.constant; import com.example.ggq.gaoguoqingzhoukao2.utils.HttpUtils; import java.util.ArrayList; import java.util.List; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers;public class moudleimp implements icontract.imoudel {@Overridepublic void requestdata(final oncalllisten oncalllisten) {//獲取數(shù)據(jù)庫final workDao workDao = app.getinstance().getDaoSession().getWorkDao();//全查List<work> works = workDao.loadAll();//判斷if (works.size()>0){//進(jìn)行接口回調(diào)oncalllisten.responsemsg(works);return;}//查不到進(jìn)行網(wǎng)絡(luò)請求以HttpUtils httpUtils = HttpUtils.getinstance();api api = httpUtils.getpost(constant.BASE_URL);//獲取接口中的方法Observable<news> observable = api.getresponse();//獲取具體的參數(shù)observable//運(yùn)行到IO線程.subscribeOn(Schedulers.io())//回調(diào)到主線程.observeOn(AndroidSchedulers.mainThread())//不完成回調(diào).subscribe(new Consumer<news>() {@Overridepublic void accept(news news) throws Exception {//獲取具體的對象List<news.DataBean> data = news.getData();//創(chuàng)建新的集合ArrayList<work> work1= new ArrayList<>();//進(jìn)行遍歷for (int i=0;i<data.size();i++){//獲取數(shù)據(jù)String title = data.get(i).getTitle();String logo = data.get(i).getLogo();//創(chuàng)建對象work work = new work();work.setImgurl(logo);work.setTitle1(title);//添加到集合中work1.add(work);}//接口回調(diào)oncalllisten.responsemsg(work1);//存到數(shù)據(jù)庫workDao.insertInTx(work1);}}, new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) throws Exception {oncalllisten.responsemsg(null);}});} }//presenter實(shí)現(xiàn)類
package com.example.ggq.gaoguoqingzhoukao2.mvp;import com.example.ggq.gaoguoqingzhoukao2.bean.work; import java.lang.ref.WeakReference; import java.util.List;public class Presenterimp implements icontract.ipresenter<icontract.iview> {private icontract.iview iview;private moudleimp moudleimp;private WeakReference<icontract.iview> iviewWeakReference;private WeakReference<icontract.imoudel> weakReference;@Overridepublic void attachview(icontract.iview iview) {this.iview = iview;moudleimp = new moudleimp();//創(chuàng)建弱引用iviewWeakReference = new WeakReference<>(iview);weakReference = new WeakReference<icontract.imoudel>(moudleimp);}@Overridepublic void detachview(icontract.iview iview) {//取消關(guān)聯(lián)iviewWeakReference.clear();weakReference.clear();}@Overridepublic void requestinfo() {//接口回調(diào)moudleimp.requestdata(new icontract.imoudel.oncalllisten() {@Overridepublic void responsemsg(List<work> works) {//v層里面的方法iview.showdata(works);}});} }//fragment
package com.example.ggq.gaoguoqingzhoukao2.fragment;import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.ggq.gaoguoqingzhoukao2.R; import com.example.ggq.gaoguoqingzhoukao2.adapter.myadapter; import com.example.ggq.gaoguoqingzhoukao2.bean.work; import com.example.ggq.gaoguoqingzhoukao2.mvp.Presenterimp; import com.example.ggq.gaoguoqingzhoukao2.mvp.icontract; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder;/*** A simple {@link Fragment} subclass.*/ public class One extends Fragment implements icontract.iview {@BindView(R.id.recycleview)RecyclerView recycleview;Unbinder unbinder;private Presenterimp Presenterimp;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment_one, container, false);unbinder = ButterKnife.bind(this, view);Presenterimp = new Presenterimp();Presenterimp.attachview(this);//請求Presenterimp.requestinfo();return view;}@Overridepublic void onDestroyView() {super.onDestroyView();unbinder.unbind();//取消關(guān)聯(lián)的方法Presenterimp.detachview(this);}@Overridepublic void showdata(List<work> works) {//設(shè)置布局管理器GridLayoutManager manager = new GridLayoutManager(getActivity(), 2, GridLayoutManager.VERTICAL, false);recycleview.setLayoutManager(manager);//創(chuàng)建適配器myadapter myadapter = new myadapter(getActivity(), works);//設(shè)置適配器recycleview.setAdapter(myadapter);} }//app
package com.example.ggq.gaoguoqingzhoukao2.app;import android.app.Application; import android.database.sqlite.SQLiteDatabase; import com.example.ggq.gaoguoqingzhoukao2.bean.DaoMaster; import com.example.ggq.gaoguoqingzhoukao2.bean.DaoSession; import com.facebook.drawee.backends.pipeline.Fresco;public class app extends Application {private static app app;private DaoSession daoSession;@Overridepublic void onCreate() {super.onCreate();//上下文app=app.this;//初始化Fresco.initialize(this);//獲取具體事務(wù)DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "bwie");//獲取可讀可寫數(shù)據(jù)庫SQLiteDatabase db = helper.getWritableDatabase();//配置默認(rèn)信息DaoMaster daoMaster = new DaoMaster(db);//做曾刪改查daoSession = daoMaster.newSession();}public static app getinstance(){if (app==null){app=new app();}return app;}//提供方法public DaoSession getDaoSession() {return daoSession;} }//adapter
package com.example.ggq.gaoguoqingzhoukao2.adapter;import android.content.Context; 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.example.ggq.gaoguoqingzhoukao2.R; import com.example.ggq.gaoguoqingzhoukao2.bean.work; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List;public class myadapter extends RecyclerView.Adapter<myadapter.oneholder> {private Context context;private List<work> list;public myadapter(Context context, List<work> list) {this.context = context;this.list = list;}@NonNull@Overridepublic oneholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.include, null);//創(chuàng)建對象oneholder oneholder = new oneholder(view);return oneholder;}@Overridepublic void onBindViewHolder(@NonNull oneholder holder, int position) {holder.bt.setText(list.get(position).getTitle1());//獲取路徑Uri uri = Uri.parse(list.get(position).getImgurl());//設(shè)置圖片holder.my_image_view.setImageURI(uri);}@Overridepublic int getItemCount() {return list == null ? 0 : list.size();}//創(chuàng)建類class oneholder extends RecyclerView.ViewHolder{private TextView bt;private SimpleDraweeView my_image_view;public oneholder(View itemView) {super(itemView);//創(chuàng)建視圖bt = itemView.findViewById(R.id.bt);my_image_view = itemView.findViewById(R.id.my_image_view);}} }//api
package com.example.ggq.gaoguoqingzhoukao2.api;import com.example.ggq.gaoguoqingzhoukao2.bean.news; import io.reactivex.Observable; import retrofit2.http.GET;public interface api {@GET("content_lists&version=1.7&token=&type=1&cat=&catid2=&page=1")Observable<news> getresponse(); }//constant
package com.example.ggq.gaoguoqingzhoukao2.constant;public class constant {//定義接口地址public static final String URL="https://app.tuozhe8.com/api.php/api/Lists/content_lists&version=1.7&token=&type=1&cat=&catid2=&page=1";public static final String BASE_URL="https://app.tuozhe8.com/api.php/api/Lists/"; }總結(jié)
- 上一篇: 扬尘天气在家如何防护措施 家里空气中的沙
- 下一篇: webpack3.6.0安装reques