Retrofit+Rxjava+Mvp

接口

  compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'io.reactivex:rxandroid:1.2.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.jcodecraeer:xrecyclerview:1.3.2'
    compile 'com.facebook.fresco:fresco:0.12.0'

RetrofitService类

package com.example.administrator.mvpdemo.service;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by win764-1 on 2016/12/12.
 */

public interface RetrofitService {
    @GET("huabian/?key=71e58b5b2f930eaf1f937407acde08fe")
    Observable<Book> getcall(@Query("num") String num);
    //请求方式
    //
    //http://api.tianapi.com/huabian/?key=71e58b5b2f930eaf1f937407acde08fe&num
//    @GET("book/search")
//    //Observable
//    //@Query() ?后面用它去拼接
//    //@QueryMap ?后面拼接数组用的
//   /* @Path:所有在网址中的参数(URL的问号前面),如:
//    http://102.10.10.132/api/Accounts/{accountId}
//    @Query:URL问号后面的参数,如:
//    http://102.10.10.132/api/Comments?access_token={access_token}
//    @QueryMap:相当于多个@Query
//    @Field:用于POST请求,提交单个数据
//    @Body:相当于多个@Field,以对象的形式提交
//*/
//
//    Observable<Book> getSearchBooks(@Query("q") String name,
//                                    @Query("tag") String tag, @Query("start") int start,
//                                    @Query("count") int count);

}

RetrofitHelper类

import android.content.Context;

import com.google.gson.GsonBuilder;



import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class RetrofitHelper {

    private Context mCntext;
   //初始化
    OkHttpClient client = new OkHttpClient();
    //gson工厂
    GsonConverterFactory factory = GsonConverterFactory.create(new GsonBuilder().create());
    private static RetrofitHelper instance = null;
    private Retrofit mRetrofit = null;
    //单例模式
    public static RetrofitHelper getInstance(Context context){
        if (instance == null){
            instance = new RetrofitHelper(context);
        }
        return instance;
    }
    private RetrofitHelper(Context mContext){
        mCntext = mContext;
        init();
    }

    private void init() {
        resetApp();
    }

    private void resetApp() {
        //初始化retrofit
        mRetrofit = new Retrofit.Builder()
                .baseUrl("http://api.tianapi.com/")
                .client(client)
                .addConverterFactory(factory)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    }
    public RetrofitService getServer(){
        return mRetrofit.create(RetrofitService.class);
    }
}

DataManager类

package com.example.administrator.mvpdemo.service.manager;

import android.content.Context;

import com.example.administrator.mvpdemo.service.RetrofitHelper;
import com.example.administrator.mvpdemo.service.RetrofitService;
import com.example.administrator.mvpdemo.service.entity.Book;

import rx.Observable;


/**
 * Created by win764-1 on 2016/12/12.
 */

public class DataManager {
    private RetrofitService mRetrofitService;
    //构造器里获取RetrofitService
    public DataManager(Context context){
        this.mRetrofitService = RetrofitHelper.getInstance(context).getServer();
    }
    //网络请求方法getSearchBooks
    public Observable<Book> getcall(String num){
        return mRetrofitService.getcall(num);
    }
}

Model类

package com.example.administrator.mvpdemo.service.model;

import android.content.Context;
import android.util.Log;

import com.example.administrator.mvpdemo.service.entity.Book;
import com.example.administrator.mvpdemo.service.manager.DataManager;
import com.example.administrator.mvpdemo.service.presenter.Presenter;

import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;

/**
 * author:Created by MingShao on 2018/1/30.
 */

public class Model {

    private Context mContext;
    public Model( Context mContext) {
        this.mContext = mContext;
    }
    public void getSearchBooks(String num, final Presenter presenter){
        DataManager manager = new DataManager(mContext);
        CompositeSubscription mCompositeSubscription = new CompositeSubscription();

        mCompositeSubscription.add(

                //observerble 被观察者
                manager.getcall(num)
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        //订阅
                        .subscribe(
                                //观察者
                                new Observer<Book>() {
                                    @Override
                                    public void onCompleted() {
                                        Log.d("xxx", "onCompleted: "+"onCompleted");
                                    }

                                    @Override
                                    public void onError(Throwable e) {

                                    }

                                    @Override
                                    public void onNext(Book book) {
                                        Log.d("jiba", "onNext: "+book.toString());
                                        presenter.getModelData(book);

                                    }
                                })
        );
    }

}

P层接口

public interface Presenter {
    void getModelData(Book book);
}


P层

public class BookPresenter implements Presenter{
    private MainActivity mContext;
    Model model;
    public BookPresenter (MainActivity mContext){
        this.mContext = mContext;
       model = new Model(mContext);
    }
    public void getSearchBooks(String num){


        model.getSearchBooks(num+"",this);

    }


    @Override
    public void getModelData(Book book) {
    mContext.onSuccess(book);
    }

    public void ondestroy(){
        mContext=null;
    }
}

V层接口

public interface BookView extends View {
    void onSuccess(Book mBook);
    void onError(String result);
}


public interface View {
    void getPresenterData(Book book);

}



V层

package com.example.administrator.mvpdemo.ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.administrator.mvpdemo.R;
import com.example.administrator.mvpdemo.service.OnItemClickListener;
import com.example.administrator.mvpdemo.service.entity.Book;
import com.example.administrator.mvpdemo.service.presenter.BookPresenter;
import com.example.administrator.mvpdemo.service.view.BookView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.List;

import rx.subscriptions.CompositeSubscription;

public class MainActivity extends AppCompatActivity implements BookView{


    private Button button;
    //view 中初始化presenter对象
    private BookPresenter mBookPresenter = new BookPresenter(this);
    private XRecyclerView xre;
     private int i = 20;
    private Adapter adapter;
    private List<Book.NewslistBean> newslist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       xre=(XRecyclerView) findViewById(R.id.xre);
        button = (Button)findViewById(R.id.button);
        xre.setPullRefreshEnabled(true);
        xre.setLoadingMoreEnabled(true);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "哈哈哈", Toast.LENGTH_SHORT).show();
                mBookPresenter.getSearchBooks(i+"");
            }
        });
        xre.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                getDat(i);

                     // 刷新完成
                     xre.refreshComplete();
                        newslist.clear();



            }

            @Override
            public void onLoadMore() {

                            i++;
                          getDat(i);
                        // 刷新完成
                        xre.loadMoreComplete();
            }
        });
    }

    private void getDat(int i) {
        mBookPresenter.getSearchBooks(20+"");

    }

    @Override
    protected void onStop() {
        CompositeSubscription compositeSubscription = new CompositeSubscription();
        compositeSubscription.unsubscribe();
        super.onStop();
    }

    @Override
    protected void onDestroy(){
        mBookPresenter.ondestroy();
        super.onDestroy();
    }

    @Override
    public void onSuccess(Book mBook) {
        Log.d("zzz", "onSuccess: "+mBook.toString());
        newslist = mBook.getNewslist();
        adapter = new Adapter(newslist,this);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        xre.setLayoutManager(linearLayoutManager);
        xre.setAdapter(adapter);
        adapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onClick(int position) {
                Toast.makeText(MainActivity.this, ""+ newslist.get(position).getUrl(), Toast.LENGTH_SHORT).show();
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
               intent.putExtra("url", newslist.get(position).getUrl());
                startActivity(intent);
            }

            @Override
            public void onLongClick(int position) {

            }
        });
//        if (adapter==null){
//
//        }else{
//            adapter.notifyDataSetChanged();
//        }


    }

    @Override
    public void onError(String result) {

    }

    @Override
    public void getPresenterData(Book book) {

    }
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值