1.依賴
implementation ‘io.reactivex.rxjava2:rxjava:2.0.7’
implementation ‘io.reactivex.rxjava2:rxandroid:2.0.1’
implementation ‘com.squareup.retrofit2:retrofit:2.1.0’
implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.2.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’
Xrecyclerview依賴
implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
2.接口
APIKEY=‘71e58b5b2f930eaf1f937407acde08fe
http://api.tianapi.com/nba/?key=APIKEY&num=10
3.httputil
public interface HttpUrluril {
String BASE_URL=“http://api.tianapi.com/”;
String ER_URL=“nba/”;
}
4.RetrofitUtil
public class RetrofitUtil {
private static RetrofitUtil instance;
private Retrofit mRetrofit;
private OkHttpClient okHttpClient = new OkHttpClient();
public static RetrofitUtil getInstance(){
if (instance==null){
instance = new RetrofitUtil();
}
return instance;
}
private RetrofitUtil(){
mRetrofit = new Retrofit.Builder()
.baseUrl(HttpUrluril.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
}
public T createApi(Class cls){
T t = mRetrofit.create(cls);
return t;
}
}
5.Apiservice
public interface ApiService {
@GET(HttpUrluril.ER_URL)
Observable getBeanen(@Query(“key”) String key, @Query(“num”) int num);
}
6.DataCallBack
public interface DataCallBack {
void Onsuccess(JsonBean jsonBean);
void OnFailer(String error);
}
7.view
public interface DataView {
void Onsuccess(JsonBean jsonBean);
void OnFailer(String error);
}
8.model
public class DataModel {
public void show(String url, int num, final DataCallBack dataCallBack){
ApiService apiService = RetrofitUtil.getInstance().createApi(ApiService.class);
apiService.getBeanen(“71e58b5b2f930eaf1f937407acde08fe”,num)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(JsonBean listJsonBean) {
dataCallBack.Onsuccess(listJsonBean);
}
@Override
public void onError(Throwable e) {
dataCallBack.OnFailer("失敗");
}
@Override
public void onComplete() {
}
});
}
}
9.Presenter
public class DataPresenter {
private DataView dataView;
private DataModel dataModel;
public DataPresenter(DataView dataView) {
this.dataView = dataView;
dataModel = new DataModel();
}
public void show(String url,int num){
dataModel.show(url, num, new DataCallBack() {
@Override
public void Onsuccess(JsonBean listJsonBean) {
dataView.Onsuccess(listJsonBean);
}
@Override
public void OnFailer(String error) {
dataView.OnFailer(error);
}
});
}
}
10.Adapter
public class XAdapter extends XRecyclerView.Adapter {
private Context context;
private JsonBean jsonBean;
public XAdapter(Context context, JsonBean listJsonBean) {
this.context = context;
this.jsonBean = listJsonBean;
}
public XAdapter(Context context) {
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
RecyclerView.ViewHolder viewHolder=null;
viewHolder = new Holder(inflate);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((Holder)holder).textView.setText(jsonBean.getNewslist().get(position).getTitle());
Uri uri=Uri.parse("https://pic.baike.soso.com/ugc/baikepic2/3233/20170730123721-334049994.jpg/0");
Picasso.with(context).load(uri).into(((Holder)holder).imageView);
}
@Override
public int getItemCount() {
return jsonBean.getNewslist().size();
}
private class Holder extends XRecyclerView.ViewHolder{
private final ImageView imageView;
private final TextView textView;
public Holder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_item);
textView = itemView.findViewById(R.id.tv);
}
}
}
11.Activity
public class MainActivity extends AppCompatActivity implements DataView {
private DataPresenter dataPresenter;
private XRecyclerView xrec;
private String api = “http://api.tianapi.com/”;
private int num=10;
private XAdapter xAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
dataPresenter = new DataPresenter(this);
getBean();
}
private void getBean() {
dataPresenter.show(api,num);
}
private void initView() {
xrec = (XRecyclerView) findViewById(R.id.xrec);
xrec.setLoadingMoreEnabled(true);
xrec.setPullRefreshEnabled(true);
xrec.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
num=10;
getBean();
xrec.refreshComplete();
//xAdapter.notifyDataSetChanged();
}
},2000);
}
@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
num+=10;
getBean();
xrec.loadMoreComplete();
//xAdapter.notifyDataSetChanged();
}
},2000);
}
});
}
@Override
public void Onsuccess(JsonBean listJsonBean) {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
xrec.setLayoutManager(linearLayoutManager);
xAdapter = new XAdapter(MainActivity.this,listJsonBean);
xrec.setAdapter(xAdapter);
}
@Override
public void OnFailer(String error) {
}
}