第一步:添加依赖
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'io.reactivex:rxjava:1.1.6'
implementation 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
//注意使用xrecyclerview要加上recyclerview
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.jcodecraeer:xrecyclerview:1.2.0'
第二步:布局:
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xrlv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
第三步:创建一个接口:
public interface MyServiceInterface {
@GET("nba/")
Observable<News> getBean(@QueryMap HashMap<String,String> map);
}
四:modle的接口和实现类
public interface IModle {
void getData(int page);
}
实现类
public class NewsModle implements IModle {
private List<News.NewslistBean> mList;
OnFinish mFinish;
public NewsModle(OnFinish finish) {
this.mFinish = finish;
}
@Override
public void getData(int page) {
mList = new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(NetUrl.URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
MyServiceInterface myServiceInterface = retrofit.create(MyServiceInterface.class);
HashMap<String,String> map = new HashMap<>();
map.put("key",NetUrl.APIKEY);
map.put("num","10");
map.put("page",page+"");
Observable<News> bean = myServiceInterface.getBean(map);
bean.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<News>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(News news) {
List<News.NewslistBean> newslist = news.getNewslist();
mFinish.OnFinishListener(newslist);
}
});
}
public interface OnFinish{
void OnFinishListener(List<News.NewslistBean> list);
}
}
view
public interface IView {
void showData(List<News.NewslistBean> mList);
}
present:
public class NewsPresenter implements NewsModle.OnFinish {
private NewsModle mModle;
private IView mView;
public NewsPresenter(IView view) {
mView = view;
mModle = new NewsModle(this);
}
public void getData(int page){
mModle.getData(page);
}
@Override
public void OnFinishListener(List<News.NewslistBean> list) {
mView.showData(list);
}
}
activity
public class MainActivity extends AppCompatActivity implements IView {
private XRecyclerView xrlv;
private NewsPresenter mNewsPresenter = new NewsPresenter(this);
private NewsAdapter adapter;
private int page = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
LinearLayoutManager manager = new LinearLayoutManager(this);
xrlv.setLayoutManager(manager);
adapter = new NewsAdapter(MainActivity.this);
xrlv.setAdapter(adapter);
mNewsPresenter.getData(page);
xrlv.setPullRefreshEnabled(true);
xrlv.setLoadingMoreEnabled(true);
xrlv.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
if (page==1){
Toast.makeText(MainActivity.this,"diyi",Toast.LENGTH_SHORT).show();
xrlv.refreshComplete();
}else {
page=1;
mNewsPresenter.getData(page);
}
}
@Override
public void onLoadMore() {
page++;
mNewsPresenter.getData(page);
}
});
}
private void initView() {
xrlv = (XRecyclerView) findViewById(R.id.xrlv);
}
@Override
public void showData(List<News.NewslistBean> mList) {
xrlv.refreshComplete();
xrlv.loadMoreComplete();
adapter.setList(mList,page);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mNewsPresenter != null){
mNewsPresenter = null;
}
}
}
adapter
public class NewsAdapter extends XRecyclerView.Adapter{
private List<News.NewslistBean> mList;
private Context mContext;
public NewsAdapter( Context context) {
mList = new ArrayList<>();
mContext = context;
}
public void setList(List<News.NewslistBean> list,int page) {
if (page == 1){
mList.clear();
}
mList.addAll(list);
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(),R.layout.item_news,null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ViewHolder holder1 = (ViewHolder) holder;
holder1.text_title.setText(mList.get(position).getTitle());
holder1.text_date.setText(mList.get(position).getCtime());
}
@Override
public int getItemCount() {
return mList.size();
}
public class ViewHolder extends XRecyclerView.ViewHolder {
TextView text_title,text_date;
public ViewHolder(View itemView) {
super(itemView);
text_title = itemView.findViewById(R.id.text_title);
text_date = itemView.findViewById(R.id.text_date);
}
}
}
本文详细介绍如何使用RxJava和Retrofit进行网络请求,并结合XRecyclerView实现数据的加载与刷新功能,涵盖依赖添加、接口定义、Presenter模式及Adapter适配器的实现。

726

被折叠的 条评论
为什么被折叠?



