Okhttp+Recycle+Mvp实现展示页面

UserView
public interface IUserView extends IBaseView{
    void callBackData(UserBean data);
}

BaseView

public interface IBaseView {}

ShowActivity

public class ShowActivity extends AppCompatActivity implements IUserView {

    @BindView(R.id.reView)
    RecyclerView reView;
    private String path = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
    private IUserPresenter presenter;
    private UserAdapter adapter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show_layout);
        ButterKnife.bind(this);
        initData();
        loadDataFromNet();
    }

    private void initData() {
        presenter=new IUserPresenter();
        //this == MainActivity == IMainView
        //把 当期view 与 presenter 产生关联,把当期view 的对象赋值给P层,以便 p层回调数据
        presenter.setView(this);

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        GridLayoutManager gridLayoutManager=new GridLayoutManager(this,1);
        reView.setLayoutManager(gridLayoutManager);
        adapter = new UserAdapter(this);
        reView.setAdapter(adapter);
    }

    @Override
    public void callBackData(UserBean data) {
        adapter.setData((ArrayList<UserBean.DataBean>) data.getData());
    }

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachView();
    }
}

IUserPresenter

public class IUserPresenter extends IBaseUserPresenter<IUserView> implements UserHttpUtils.CallbackData<UserBean>{
    private UserHttpUtils httpUtils;

    public IUserPresenter(){
        httpUtils = UserHttpUtils.getInstance();
        httpUtils.setCallback(this);
    }
    public void getHomeData(String url){
        //调用model层 真正的加载网络数据
        httpUtils.getData(url,NewsBean.class);
    }
    @Override
    public void onSuccess(UserBean t) {
        getView().callBackData(t);
    }

    @Override
    public void onErr(Exception e) {

    }
    public void detachView(){

    }
}

IBaseUserPresenter

public class IBaseUserPresenter <V extends IUserView>{
    private V view;

    public V getView() {
        return view;
    }

    public void setView(V view) {
        this.view = view;
    }
    public void dettachView(){
        this.view=null;
    }

}
OkHttpUtil
public class UserHttpUtils<T> {
    private static UserHttpUtils userhttpUtils;
    private UserHttpUtils(){}

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

    public void setCallback(CallbackData callbackData) {
        this.callbackData = callbackData;
    }

    public void getData(String path, final Class<T> tClass){
        OkHttpClient okHttpClient=new OkHttpClient();
        Request.Builder builder=new Request.Builder();
        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 = (T) gson.fromJson(string, UserBean.class);
                Message message = handler.obtainMessage();
                message.obj=t;
                handler.sendMessage(message);
            }
        });
    }
    public interface CallbackData<D>{
        void onSuccess(D t);
        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
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
    private Context con;
    private ArrayList<UserBean.DataBean> arr=new ArrayList<>();

    public UserAdapter(Context con) {
        this.con = con;
    }
    public void setData(ArrayList<UserBean.DataBean> list){
        if(list!=null){
            arr.addAll(list);
            notifyDataSetChanged();
        }
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(con).inflate(R.layout.list_item, null);
        MyViewHolder myViewHolder=new MyViewHolder(view);
        return myViewHolder;
    }

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

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final TextView name;
        private final ImageView img;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
            img = itemView.findViewById(R.id.icon);
        }
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值