MVP+xRecyclerView+Retrofit+OkHttp+RxJava

依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.0.+'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    compile 'com.android.support:recyclerview-v7:26.0.+'
    compile 'com.facebook.fresco:fresco:0.12.0'

// Retrofit库
    compile 'com.squareup.retrofit2:retrofit:2.0.1'
// Okhttp库
    compile 'com.squareup.okhttp3:okhttp:3.1.2'

// rxjava+rxandroid+retrofit2+okhttp

    compile 'io.reactivex:rxjava:1.0.14'
    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

}


Api包

接口BeanApi类

package com.example.com.rikao0419.Api;



import com.example.com.rikao0419.Bean;

import java.util.HashMap;
import java.util.Map;

import retrofit2.http.GET;
import retrofit2.http.QueryMap;
import rx.Observable;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public interface BeanApi {
    @GET("nba/")
    Observable<Bean> bean(@QueryMap HashMap<String, String> map);
    //http://api.tianapi.com/nba/?key="+APIKEY+"&num=10
}

MyAPL类
package com.example.com.rikao0419.Api;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public class MyAPI {
    public static final  String APIKEY="71e58b5b2f930eaf1f937407acde08fe";
    public static final  String  utils="http://api.tianapi.com/";
}

model层

   IMOdle接口

package com.example.com.rikao0419.molde;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public interface IMOdle {
    //处理数据方法
    void GetDate(int a) ;

}

   BeanModel 类

package com.example.com.rikao0419.molde;



import com.example.com.rikao0419.Api.BeanApi;
import com.example.com.rikao0419.Api.MyAPI;
import com.example.com.rikao0419.Bean;

import java.util.ArrayList;
import java.util.HashMap;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public class BeanModel implements IMOdle {
    ArrayList<Bean.NewslistBean> lists;
    OnFinish onFinish;
    public BeanModel(OnFinish onFinish){
        this.onFinish=onFinish;

    }

    //创建接口
    public interface OnFinish{
        void onFinishLinisher(ArrayList<Bean.NewslistBean> lists);
    }
    @Override
    public void GetDate(int a) {
        lists = new ArrayList<>();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(MyAPI.utils)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        // 通过动态代理获得网络接口数据
        BeanApi apiService = retrofit.create(BeanApi.class);
        HashMap<String, String> map = new HashMap<>();
        map.put("key",MyAPI.APIKEY);
        map.put("num",a+"");
        Observable<Bean> data = apiService.bean(map);
        //请求数据的线程
        data.subscribeOn(Schedulers.io())
                // 设置请求结束后的线程
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Bean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Bean bean) {
                        // Log.d("main2", "onNext: " + bean.newslist + "----");
                        lists = (ArrayList<Bean.NewslistBean>) bean.getNewslist();
                        onFinish.onFinishLinisher(lists);
                    }
                });
    }
}

presenter层
 
UserPresenter类

package com.example.com.rikao0419.presenter;

import com.example.com.rikao0419.Bean;
import com.example.com.rikao0419.molde.BeanModel;
import com.example.com.rikao0419.view.IView;

import java.util.ArrayList;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public class UserPresenter implements BeanModel.OnFinish {

    private final IView iview;
    private final BeanModel userModel;

    public UserPresenter(IView iview) {
        this.iview = iview;
        userModel = new BeanModel(this);
    }

    // 处理model与view的逻辑
    public void getData(){
        userModel.GetDate(20);
    }

    @Override
    public void onFinishLinisher(ArrayList<Bean.NewslistBean> lists) {
        iview.ShowData(lists);
    }
}
 
 
View层
IView


 
package com.example.com.rikao0419.view;

import com.example.com.rikao0419.Bean;

import java.util.ArrayList;

/**
 * Created by 丶未央 on 2018/4/19.
 */

public interface IView {
    void ShowData(ArrayList<Bean.NewslistBean> lists);
}

 
 
 
MainActivity类

package com.example.com.rikao0419;

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

import com.example.com.rikao0419.presenter.UserPresenter;
import com.example.com.rikao0419.view.IView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements IView{
    private RecyclerView rlv;
    UserPresenter presenter;
    MyXrecyclerviewAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init() {
        rlv= (RecyclerView) findViewById(R.id.rlv);

        // 初始化数据
        initData();

    }
    private void initData() {
        presenter = new UserPresenter(this);
        presenter.getData();
    }

    @Override
    public void ShowData(ArrayList<Bean.NewslistBean> lists) {
        rlv.setLayoutManager(new LinearLayoutManager(this));
        rlv.setAdapter(adapter = new MyXrecyclerviewAdapter(lists,this));
    }
}

 
 
Adapter适配器
MyXrecyclerviewAdapter

package com.example.com.rikao0419;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;

import java.util.ArrayList;

/**
 * Created by 丶未央 on 2018/4/19.
 */

class MyXrecyclerviewAdapter extends RecyclerView.Adapter{
    // 数据源
    ArrayList<Bean.NewslistBean> lists;
    // 上下文
    Context context;
    public MyXrecyclerviewAdapter(ArrayList<Bean.NewslistBean> lists, Context context) {
        this.lists = lists;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.recy_item, null);

        MyViewHolder holder = new MyViewHolder(view);



        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyViewHolder holderone= (MyViewHolder) holder;
        holderone.tv.setText(lists.get(position).getTitle());
        Uri uri = Uri.parse(lists.get(position).getPicUrl());
        holderone.img.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return lists.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder
    {

        TextView tv;
        SimpleDraweeView img;

        @SuppressLint("WrongViewCast")
        public MyViewHolder(View view)
        {
            super(view);
            tv =  view.findViewById(R.id.recy_item_tv);
            img = view.findViewById(R.id.recy_item_img);
        }
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值