依賴
compile 'com.android.support:recyclerview-v7:26.0.+'
compile 'com.facebook.fresco:fresco:0.12.0'
// Retrofit庫
compile 'com.squareup.retrofit2:retrofit:2.0.1'
// Okhttp庫
compile 'com.squareup.okhttp3:okhttp:3.1.2'
// rxjava+rxandroid+retrofit2+okhttp
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
Api包裏倆個類
public interface BeanApi {
@GET("nba/")
Observable<Bean> bean( @QueryMap Map<String,String> map);
//http://api.tianapi.com/nba/?key="+APIKEY+"&num=10
}
public class MyAPI {
public static final String APIKEY="71e58b5b2f930eaf1f937407acde08fe";
public static final String utils="http://api.tianapi.com/";
}
MyApp
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
model包
接口
public interface IMOdel {
// 處理數據的方法
void GetData(int a);
}
工具類
public class BeanModel implements IMOdel {
ArrayList<Bean.NewslistBean> lists;
private OnFinish onFinish;
public BeanModel(OnFinish onFinish) {
this.onFinish = onFinish;
}
// 建立接口
public interface OnFinish{
void onFinishLinisher(ArrayList<Bean.NewslistBean> lists);
}
@Override
public void GetData(int a) {
lists = new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MyAPI.utils)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
// 經過動態代理得到網絡接口數據
BeanApi apiService = retrofit.create(BeanApi.class);
// Observable<Bean> data= (Observable<Bean>) apiService.bean();
Map<String,String> map=new HashMap<>();
map.put("key",MyAPI.APIKEY);
map.put("num",a+"");
Observable<Bean> data=apiService.bean(map);
// 設置請求數據時候的線程
data.subscribeOn(Schedulers.io())
// 設置請求結束後的線程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Bean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Bean bean) {
// Log.d("main2", "onNext: " + bean.newslist + "----");
lists = (ArrayList<Bean.NewslistBean>) bean.newslist;
onFinish.onFinishLinisher(lists);
}
});
}
}
presenter包
public class UserPresenter implements BeanModel.OnFinish {
private final IView iview;
private final BeanModel userModel;
public UserPresenter(IView iview) {
this.iview = iview;
userModel = new BeanModel(this);
}
// 處理model與view的邏輯
public void getData(){
userModel.GetData(10);
}
@Override
public void onFinishLinisher(ArrayList<Bean.NewslistBean> lists) {
iview.ShowData(lists);
}
}
view包
public interface IView {
void ShowData(ArrayList<Bean.NewslistBean> lists);
}
MainActivity類
public class MainActivity extends AppCompatActivity implements IView{
private RecyclerView rlv;
UserPresenter presenter;
MyXrecyclerviewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
rlv= (RecyclerView) findViewById(R.id.rlv);
// 初始化數據
initData();
}
private void initData() {
presenter = new UserPresenter(this);
presenter.getData();
}
@Override
public void ShowData(ArrayList<Bean.NewslistBean> lists) {
rlv.setLayoutManager(new LinearLayoutManager(this));
rlv.setAdapter(adapter = new MyXrecyclerviewAdapter(lists,this));
}
}
適配器
public class MyXrecyclerviewAdapter extends RecyclerView.Adapter<MyXrecyclerviewAdapter.MyViewHolder> { // 數據源 ArrayList<Bean.NewslistBean> lists; // 上下文 Context context; public MyXrecyclerviewAdapter(ArrayList<Bean.NewslistBean> lists, Context context) { this.lists = lists; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recy_item, parent, false)); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.tv.setText(lists.get(position).title); Uri uri = Uri.parse(lists.get(position).picUrl); holder.img.setImageURI(uri); } @Override public int getItemCount() { return lists.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; SimpleDraweeView img; public MyViewHolder(View view) { super(view); tv = view.findViewById(R.id.recy_item_tv); img = view.findViewById(R.id.recy_item_img); } }}