MVP+okHttp+recyclerView显示

依赖

implementation 'com.squareup.okhttp3:okhttp:3.7.0'
implementation 'com.squareup.okio:okio:1.12.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'jp.wasabeef:glide-transformations:3.0.1'
implementation 'com.github.bumptech.glide:glide:4.8.0'

主页面

package com.example.week2.view.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.example.week2.R;
import com.example.week2.model.Bean.News;
import com.example.week2.presenter.MainPresenter;
import com.example.week2.view.adapter.NewsAdapter;
import com.example.week2.view.interfaces.IMainView;

public class MainActivity extends AppCompatActivity implements IMainView {
    private String path="http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
    private MainPresenter mainPresenter;
    private RecyclerView recyclerView;
    private NewsAdapter newsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        loadDataFromNet();
    }

    private void loadDataFromNet() {
        mainPresenter.getHomeData(path);
    }

    private void initData() {
        mainPresenter = new MainPresenter();
        mainPresenter.setView(this);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //网格
        //GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        recyclerView.setLayoutManager(linearLayoutManager);
        newsAdapter=new NewsAdapter(this);
        recyclerView.setAdapter(newsAdapter);
    }

    private void initView() {
        recyclerView = findViewById(R.id.view);
    }

    @Override
    public void onSuccess(News news) {
        newsAdapter.setData(news.getData());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mainPresenter.dettachView();
    }

}

接口

package com.example.week2.view.interfaces;

import com.example.week2.model.Bean.News;

public interface IMainView extends IBseView{
    void onSuccess(News news);
}

basepresenter

package com.example.week2.presenter;

import android.widget.ImageView;

import com.example.week2.view.activity.MainActivity;
import com.example.week2.view.interfaces.IBseView;

public class BasePresenter<V extends IBseView> {
    private V mthis;
    public void setView(V mainActivity) {
        this.mthis=mainActivity;
    }
    public void dettachView(){
        this.mthis=null;
    }
    public V getView(){
        return mthis;
    }
}

mainpresenter继承basepresenter

package com.example.week2.presenter;

import com.example.week2.model.Bean.HttpUtile;
import com.example.week2.model.Bean.News;
import com.example.week2.view.activity.MainActivity;
import com.example.week2.view.interfaces.IMainView;

public class MainPresenter extends  BasePresenter<IMainView> implements HttpUtile.CallbackData<News>{
    private final HttpUtile httpUtile;

    public MainPresenter(){
        httpUtile = HttpUtile.getInstance();
        httpUtile.setCallback(this);
    }
    public void getHomeData(String path) {
        httpUtile.getData(path,News.class);
    }

    @Override
    public void onSuccess(News  news) {
        getView().onSuccess(news);
    }

    @Override
    public void onErr(Exception e) {

    }
}

okhttp

package com.example.week2.model.Bean;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.example.week2.presenter.MainPresenter;
import com.google.gson.Gson;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpUtile<T> {

    private static HttpUtile httpUtile;
    private CallbackData callbackData;
    public HttpUtile (){}
    public static HttpUtile getInstance(){
        if(httpUtile==null){
            httpUtile = new HttpUtile();
            return httpUtile;
        }else{
            return  httpUtile;
        }
    }

    public void getData(String path, final Class<T> tClass){
        OkHttpClient okHttpClient=new OkHttpClient();
        Request.Builder builder = new Request.Builder();
        final Request request = builder.url(path).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callbackData.onErr(e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                Gson gson=new Gson();
                T t = gson.fromJson(string, tClass);
                Message message = handler.obtainMessage();
                message.obj=t;
                handler.sendMessage(message);
            }
        });
    }

    public void setCallback(CallbackData callbackData) {
        this.callbackData=callbackData;
    }
    public interface CallbackData<D>{
        void onSuccess(D d);
        void onErr(Exception e);
    }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            T obj=(T) msg.obj;
            callbackData.onSuccess(obj);
        }
    };
}

adapter适配器

package com.example.week2.view.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.week2.R;
import com.example.week2.model.Bean.News;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
    private  Context context;
    private ArrayList<News.DataBean> list=new ArrayList<>();
    public NewsAdapter(Context context) {
        this.context = context;
    }

    public void setData(List<News.DataBean> data) {
        if(data!=null){
            list.addAll(data);
            notifyDataSetChanged();
        }
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.itme, null);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
        myViewHolder.name.setText(list.get(i).getTitle());
        Glide.with(context).load(list.get(i).getImage_url()).into(myViewHolder.img);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView name;
        ImageView img;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            name=itemView.findViewById(R.id.name);
            img=itemView.findViewById(R.id.image);
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值