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 上的机器支持 WebP 时,需要添加
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 (静态图+动图),需要添加
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.requested
        if (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;
    //私有构造
    private HttpUtils(){
        okHttpClient=new OkHttpClient.Builder()
                .addInterceptor(new longinterceptor())
                .build();
    }
    //拦截器方法
    class longinterceptor implements Interceptor{

        @Override
        public Response intercept(Chain chain) throws IOException {
            //请求对象
            Request request = chain.request();
            //创建方法
            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>{
        //关联
        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实现类
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 {
    @Override
    public void requestdata(final oncalllisten oncalllisten) {
        //获取数据库
        final workDao workDao = app.getinstance().getDaoSession().getWorkDao();
        //全查
        List<work> works = workDao.loadAll();
        //判断
        if (works.size()>0){
            //进行接口回调
            oncalllisten.responsemsg(works);
            return;
        }
        //查不到进行网络请求以
        HttpUtils httpUtils = HttpUtils.getinstance();
        api api = httpUtils.getpost(constant.BASE_URL);
        //获取接口中的方法
        Observable<news> observable = api.getresponse();
        //获取具体的参数
        observable
                //运行到IO线程
        .subscribeOn(Schedulers.io())
                //回调到主线程
        .observeOn(AndroidSchedulers.mainThread())
                //不完成回调
        .subscribe(new Consumer<news>() {
            @Override
            public void accept(news news) throws Exception {
                //获取具体的对象
                List<news.DataBean> data = news.getData();
                //创建新的集合
                ArrayList<work> work1= new ArrayList<>();
                //进行遍历
                for (int i=0;i<data.size();i++){
                    //获取数据
                    String title = data.get(i).getTitle();
                    String logo = data.get(i).getLogo();
                    //创建对象
                    work work = new work();
                    work.setImgurl(logo);
                    work.setTitle1(title);
                    //添加到集合中
                   work1.add(work);

                }
                //接口回调
                oncalllisten.responsemsg(work1);
                //存到数据库
                workDao.insertInTx(work1);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                oncalllisten.responsemsg(null);
            }
        });

    }
}

//presenter实现类

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;

    @Override
    public void attachview(icontract.iview iview) {
        this.iview = iview;
        moudleimp = new moudleimp();
        //创建弱引用
        iviewWeakReference = new WeakReference<>(iview);
        weakReference = new WeakReference<icontract.imoudel>(moudleimp);
    }

    @Override
    public void detachview(icontract.iview iview) {

        //取消关联
        iviewWeakReference.clear();
        weakReference.clear();
    }

    @Override
    public void requestinfo() {
        //接口回调
        moudleimp.requestdata(new icontract.imoudel.oncalllisten() {
            @Override
            public 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;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        unbinder = ButterKnife.bind(this, view);
        Presenterimp = new Presenterimp();
        Presenterimp.attachview(this);
        //请求
        Presenterimp.requestinfo();
        return view;
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
        //取消关联的方法
        Presenterimp.detachview(this);
    }

    @Override
    public void showdata(List<work> works) {
        //设置布局管理器
        GridLayoutManager manager = new GridLayoutManager(getActivity(), 2, GridLayoutManager.VERTICAL, false);
        recycleview.setLayoutManager(manager);
        //创建适配器
        myadapter myadapter = new myadapter(getActivity(), works);
        //设置适配器
        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;

    @Override
    public void onCreate() {
        super.onCreate();
        //上下文
        app=app.this;
        //初始化
        Fresco.initialize(this);
        //获取具体事务
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "bwie");
        //获取可读可写数据库
        SQLiteDatabase db = helper.getWritableDatabase();
        //配置默认信息
        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
    @Override
    public oneholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.include, null);
        //创建对象
        oneholder oneholder = new oneholder(view);
        return oneholder;
    }

    @Override
    public void onBindViewHolder(@NonNull oneholder holder, int position) {
       holder.bt.setText(list.get(position).getTitle1());
       //获取路径
        Uri uri = Uri.parse(list.get(position).getImgurl());
        //设置图片
        holder.my_image_view.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }
    //创建类
    class oneholder extends  RecyclerView.ViewHolder{

        private   TextView  bt;
        private   SimpleDraweeView  my_image_view;

        public oneholder(View itemView) {
            super(itemView);
            //创建视图
            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/";
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值