MVP+RxJava+Retrofit使用GET解析拼引數
阿新 • • 發佈:2019-01-28
新增依賴
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 classApi { // http://gank.io/api/data/Android/10/1 public 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 {
@Override public 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 @Override public 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; }
@Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); }
@Override public 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>