MVP+RXJava+Retryfit使用post解析

来源:互联网 发布:聊天套路知乎 编辑:程序博客网 时间:2024/06/07 12:40
//   retrofit2    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'



public interface Iview { //获取请求好的数据 void getShowData(MovieBean movieBean);}


public class Api {    public static final String BASE_URL="http://api.svipmovie.com/front/";}



public interface ApiService {    @FormUrlEncoded    @POST("columns/getVideoList.do")    Observable<MovieBean> getMovieData(@Field("catalogId") String catalogId, @Field("pnum") String pnum);}



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



public class HttpModel implements Imodel{    public static final String TAG="HttpModel";    private OnFinish onFinish;    //定义接口    public interface OnFinish{        void OnFinishListener(MovieBean movieBean);    }    public void setOnFinish(OnFinish finish){        this.onFinish=finish;    }    @Override    public void getHttpData(String url,String catalogId,String pnum) {        Retrofit retrofit = new Retrofit.Builder().baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        //动态代理得到网络接口        ApiService apiService = retrofit.create(ApiService.class);        rx.Observable<MovieBean> movieData = apiService.getMovieData(catalogId,pnum);        movieData.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Observer<MovieBean>() {                @Override                public void onCompleted() {                    Log.d(TAG, "onCompleted: ");                }                @Override                public void onError(Throwable e) {                    Log.d(TAG, "onError: ");                    e.printStackTrace();                }                @Override                public void onNext(MovieBean movieBean) {                    Log.d(TAG, "onNext: "+movieBean.getCode()+"========="+movieBean.getMsg());                    onFinish.OnFinishListener(movieBean);                }            });    }}





public class MyPresenter implements HttpModel.OnFinish{    //定义view和model接口的变量    private final Iview iview;    private final HttpModel httpModel;    public MyPresenter(Iview iview) {        this.iview = iview;        this.httpModel = new HttpModel();        httpModel.setOnFinish(this);    }    //传值到model中    public void setMovieData(String url,String catalogId,String pnum){        httpModel.getHttpData(url,catalogId,pnum);    }    @Override    public void OnFinishListener(MovieBean movieBean) {        //将数据传给iview的实现类        iview.getShowData(movieBean);    }}



public class GlideImageLoader extends ImageLoader{//    @Override//    public void displayImage(Context context, Object path, ImageView imageView) {////        Uri uri = Uri.parse((String) path);//        imageView.setImageURI(uri);//    }    @Override    public void displayImage(Context context, Object path, ImageView imageView) {        Glide.with(context).load(path).into(imageView);    }}



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



public class MainActivity extends AppCompatActivity implements Iview{    @Bind(R.id.banner)    Banner banner;    @Bind(R.id.changePic)    Button changePic;    final String catalogId = "402834815584e463015584e539330016";    private List<String> imageTitle;    private List<String> imageArray;    private int randomNumber;    private MyPresenter myPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        myPresenter = new MyPresenter(this);        myPresenter.setMovieData(Api.BASE_URL, catalogId, randomNumber + "");    }    //随机数    public static int getRandomNumber(int min, int max) {        return new Random().nextInt(max) % (max - min + 1) + min;    }    @Override    public void getShowData(MovieBean movieBean) {        //设置图片加载集合        imageArray = new ArrayList<>();        //设置图片标题集合        imageTitle=new ArrayList<>();//        for (int i=0;i<movieBean.getRet().getList().size();i++){//            imageArray.add(movieBean.getRet().getList().get(i).getPic().toString());//            imageTitle.add(movieBean.getRet().getList().get(0).getTitle());//            Log.d("main", "getShowData: "+imageArray.get(i).toString());//        }//        //设置图片加载集合//        imageArray=new ArrayList<>();//        imageArray.add("http://img3.imgtn.bdimg.com/it/u=2758743658,581437775&fm=15&gp=0.jpg");//        imageArray.add("http://img3.imgtn.bdimg.com/it/u=2105877023,3759180926&fm=15&gp=0.jpg");//        imageArray.add("http://img2.imgtn.bdimg.com/it/u=1876814088,3589919070&fm=15&gp=0.jpg");        imageArray.add(movieBean.getRet().getList().get(0).getPic());        imageArray.add(movieBean.getRet().getList().get(1).getPic());        imageArray.add(movieBean.getRet().getList().get(2).getPic());        imageArray.add(movieBean.getRet().getList().get(3).getPic());        imageArray.add(movieBean.getRet().getList().get(4).getPic());        imageArray.add(movieBean.getRet().getList().get(5).getPic());        imageTitle.add(movieBean.getRet().getList().get(0).getTitle());        imageTitle.add(movieBean.getRet().getList().get(1).getTitle());        imageTitle.add(movieBean.getRet().getList().get(2).getTitle());        imageTitle.add(movieBean.getRet().getList().get(3).getTitle());        imageTitle.add(movieBean.getRet().getList().get(4).getTitle());        imageTitle.add(movieBean.getRet().getList().get(5).getTitle());        //设置banner样式        banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);        //设置图片加载器        banner.setImageLoader(new GlideImageLoader());        //设置图片集合        banner.setImages(imageArray);        //设置banner动画效果        banner.setBannerAnimation(Transformer.RotateDown);        //设置标题集合(当banner样式有显示title时)        banner.setBannerTitles(imageTitle);        banner.isAutoPlay(false);        //设置轮播时间        banner.setDelayTime(1500);        //设置指示器位置(当banner模式中有指示器时)        banner.setIndicatorGravity(BannerConfig.CENTER);        //banner设置方法全部调用完毕时最后调用        banner.start();    }    @OnClick({R.id.banner, R.id.changePic})    public void onViewClicked(View view) {        switch (view.getId()) {            case R.id.banner:                break;            case R.id.changePic:                //生成随机数                randomNumber = getRandomNumber(1, 108);                break;        }    }}



主页面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="com.example.lx_201720171121_2.MainActivity">    <com.youth.banner.Banner        xmlns:app="http://schemas.android.com/apk/res-auto"        android:id="@+id/banner"        android:layout_width="match_parent"        android:layout_height="430dp" />    <Button        android:layout_marginTop="15dp"        android:id="@+id/changePic"        android:layout_gravity="center_horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="换一换" /></LinearLayout>



在values文件下创建dimens
<resources>    <!-- Default screen margins, per the Android Design guidelines. -->    <dimen name="activity_horizontal_margin">16dp</dimen>    <dimen name="activity_vertical_margin">16dp</dimen></resources>

原创粉丝点击