网络权限
<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)); } }