MVP+RxJava+Retrofit使用GET解析拼参数

来源:互联网 发布:淘宝领的红包在哪里 编辑:程序博客网 时间:2024/06/08 03:43

添加依赖

compile 'com.hjm:BottomTabBar:1.1.1'    compile 'com.squareup.retrofit2:retrofit:2.0.1'    compile 'com.squareup.retrofit2:converter-gson:2.0.1'    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'    compile 'io.reactivex:rxandroid:1.1.0'    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'//fresco    compile 'com.facebook.fresco:fresco:0.14.1'    //banner    compile 'com.youth.banner:banner:1.4.9'//    glide    compile 'com.github.bumptech.glide:glide:3.7.0'    compile 'com.jakewharton:butterknife:7.0.1'    compile 'com.android.support:recyclerview-v7:26.+'    compile'org.greenrobot:greendao:3.1.0'    compile'org.greenrobot:greendao-generator:3.1.0'


public class Api {//    http://gank.io/api/data/Android/10/1public static final String BASE_URL="http://gank.io/api/";}

public interface ApiService {    @GET("data/Android/{size}/{page}")    Observable<MyBean> getMovieData(@Path("size") String size, @Path("page") String page);}


public class App extends Application {
@Overridepublic void onCreate() {    super.onCreate();    //初始化fresco    Fresco.initialize(this);}
}


public interface IView {    //获取请求好的数据      void getShowData(MyBean myBean);}


public class MainActivity extends AppCompatActivity {    private BottomTabBar mb;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mb =(BottomTabBar)findViewById(R.id.bottom_tab_bar);        mb.init(getSupportFragmentManager())                .setImgSize(50,50)                .setFontSize(14)                .setTabPadding(4,6,10)                .setChangeColor(Color.RED,Color.DKGRAY)                .addTabItem("首页",R.mipmap.ic_launcher, Fragment01.class)                .addTabItem("想法",R.mipmap.ic_launcher, Fragment02.class)                .addTabItem("市场",R.mipmap.ic_launcher, Fragment03.class)                .addTabItem("通知",R.mipmap.ic_launcher, Fragment04.class)                .addTabItem("更多",R.mipmap.ic_launcher, Fragment05.class)                .isShowDivider(false)                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {                    @Override                    public void onTabChange(int position, String name) {                    }                });    }}

public interface IModel {    //请求网路数据    void getHttpData(String url, String catalogId, String pnum,OnFinish onFinish);}

public interface OnFinish {    void OnFinishListener(MyBean myBean);}


public class Model implements IModel{    @Override    public void getHttpData(String url, String catalogId, String pnum, final OnFinish onFinish) {        Retrofit retrofit = new Retrofit.Builder().baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        //动态代理得到网络接口        ApiService apiService = retrofit.create(ApiService.class);        rx.Observable<MyBean> movieData = apiService.getMovieData(catalogId,pnum);        movieData.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<MyBean>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(MyBean myBean) {                      onFinish.OnFinishListener(myBean);                    }                });    }}


public interface IPresenter {    void loadList(String url,String a,String b);}


public class MyPresenter implements IPresenter {    //定义view和model接口的变量    private final IView iview;    private final IModel iModel;    public MyPresenter(IView iview) {        this.iview = iview;        this.iModel = new Model();    }    @Override    public void loadList(String url, String a, String b) {        iModel.getHttpData(url, a, b, new OnFinish() {            @Override            public void OnFinishListener(MyBean myBean) {                iview.getShowData(myBean);            }        });    }}


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {//    @Bind(R.id.name)//    TextView name;//    @Bind(R.id.des)//    TextView des;//    @Bind(R.id.img)//    ImageView img;    private Context context;    private List<MyBean.ResultsBean> list;    public MyAdapter(Context context, List<MyBean.ResultsBean> 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.name.setText(list.get(position).who);        holder.des.setText(list.get(position).desc);//        Glide.with(context).load(list.get(position).images).into(holder.img);        Uri imgUrl = Uri.parse("http://img.gank.io/fef497ed-83ba-46f6-8a94-0e7b724e1c10");        holder.img.setImageURI(imgUrl);    }    @Override    public int getItemCount() {        return list.size();    }    public class ViewHolder extends RecyclerView.ViewHolder {       public TextView name,des;        public SimpleDraweeView img;        public ViewHolder(View itemView) {            super(itemView);           name=itemView.findViewById(R.id.name);            des=itemView.findViewById(R.id.des);            img=itemView.findViewById(R.id.img);        }    }}


public class Fragment01 extends Fragment implements IView{    @Bind(R.id.recycler)    RecyclerView recycler;    
@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedIstanceState) {    View view = inflater.inflate(R.layout.fragment_01, null);    ButterKnife.bind(this, view);    LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getContext());    recycler.setLayoutManager(linearLayoutManager);    MyPresenter myPresenter = new MyPresenter(this);    myPresenter.loadList(Api.BASE_URL,"10","1");
 return view;}

@Overridepublic void onDestroyView() {    super.onDestroyView();    ButterKnife.unbind(this);}


@Overridepublic void getShowData(MyBean myBean) {
MyAdapter myAdapter = new MyAdapter(getContext(), myBean.results);recycler.setAdapter(myAdapter);
 }}



主页面布局

<com.hjm.bottomtabbar.BottomTabBar    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/bottom_tab_bar"    ></com.hjm.bottomtabbar.BottomTabBar>

fragment布局

 <android.support.v7.widget.RecyclerView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/recycler"></android.support.v7.widget.RecyclerView></LinearLayout>

item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    xmlns:fresco="http://schemas.android.com/apk/res-auto"    android:layout_height="wrap_content">    <LinearLayout        android:layout_width="0dp"        android:layout_height="150dp"        android:layout_weight="1"        android:orientation="vertical">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/name"/>        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/des"/>    </LinearLayout>    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/img"        android:layout_width="0dp"        android:layout_height="150dp"        android:layout_weight="1"        android:layout_margin="8dp"        fresco:failureImage="@mipmap/ic_launcher" /></LinearLayout>




原创粉丝点击