MvpRtrofit

网络权限

<uses-permission android:name="android.permission.INTERNET"/>
导入依赖

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
utlis

public class ClientUtils {
    private Retrofit retrofit;
    public static final String BASE_URl = "";

    private static class SingleInstance {
        private static final ClientUtils insTance = new ClientUtils(BASE_URl);
    }

    //使用默认的单例RetrofitManager,是默认的baseurl
    public static ClientUtils getDefault() {
        return SingleInstance.insTance;
    }

    private ClientUtils(String url) {
        this.retrofit = buildRetrofit(url);
    }

    //如果baseurl不是默认的话,那就调用这个方法构造一个新的RetrofitManager
    public static ClientUtils getclientData(String url) {
        return new ClientUtils(url);
    }

    private Retrofit buildRetrofit(String url) {
        Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create());

        return builder.build();
    }

    public <T> T create(Class<T> tClass) {
        return retrofit.create(tClass);
    }
}
public class IModel implements UserModel {
    @Override
    public Observable<MyBean> getMovie() {
        return ClientUtils.getclientData(API.DOUBAN_URl).create(ApiService.class).getMovieData();
    }
}
public interface UserModel {

    Observable<MyBean> getMovie();

}
public class UserPresenter {
    private final UserView userView;
    private final IModel iModel;

    public UserPresenter(UserView userView) {
        this.userView = userView;
        this.iModel = new IModel();
    }

    /**
     * presenter利用model返回的被观察者 ,用rxjava的形式处理请求结果
     */
    public void getData() {
        Observable <MyBean> observable = iModel.getMovie();
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MyBean>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull MyBean myBean) {
                        if (myBean != null) {
                            userView.getDataSeccess();
                            userView.showAdapter(myBean.getSubjects());
                            Log.d("-----", "onNext: " + myBean.toString());
                        }
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        userView.getDataSeccess();
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }


}

public interface UserView {
    void getDataSeccess();

    void getDataFailed();

    void showAdapter(List<MyBean.SubjectsBean> list);
}
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
public interface ApiService {
//    https://api.douban.com/v2/movie/top250
    @GET("v2/movie/top250")
    Observable<MyBean> getMovieData();
}
public class API {
    public static final String DOUBAN_URl = "https://api.douban.com/";
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private Context context;
    private List<MyBean.SubjectsBean> list = new ArrayList<>();

    public MyAdapter(Context context, List<MyBean.SubjectsBean> list) {
        this.context = context;
        this.list = list;
    }



    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
//        holder.fresco.setImageURI(list.get(position).getImages().getLarge());
        holder.title.setText(list.get(position).getTitle());
    }

    @Override
    public int getItemCount() {
        if (list != null) {
            return list.size();
        }else{
            return 0;
        }

    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView title;
//        private SimpleDraweeView fresco;

        public ViewHolder(View itemView) {
            super(itemView);

            this.title = itemView.findViewById(R.id.textView);
//            this.fresco = itemView.findViewById(R.id.item_fresco);

        }
    }
}
public class MainActivity extends AppCompatActivity implements UserView {

    private UserPresenter presenter;
    private List<MyBean.SubjectsBean> list = new ArrayList<>();
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        presenter = new UserPresenter(this);
        presenter.getData();
    }


    @Override
    public void getDataSeccess() {
        Toast.makeText(MainActivity.this, "请求成功!", Toast.LENGTH_LONG).show();
    }

    @Override
    public void getDataFailed() {
        Toast.makeText(MainActivity.this, "请求失败!", Toast.LENGTH_LONG).show();
    }

    @Override
    public void showAdapter(List<MyBean.SubjectsBean> list) {
        recyclerView.setAdapter(new MyAdapter(MainActivity.this, list));
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值