导入依赖
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
创建adpter
public class Myadpter extends RecyclerView.Adapter<Myadpter.MyViewHolder>{
Context context;
List<User.NewslistBean> list;
public Myadpter(Context context,List<User.NewslistBean> list){
this.context=context;
this.list=list;
}
@Override
public Myadpter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context, R.layout.item,null);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(Myadpter.MyViewHolder holder, int position) {
holder.tv.setText(list.get(position).getTitle());
DraweeController dc= Fresco.newDraweeControllerBuilder()
.setUri(list.get(position).getPicUrl())
.build();
holder.sim.setController(dc);
}
@Override
public int getItemCount() {
if (list!=null)
{
return list.size();
}
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
SimpleDraweeView sim;
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
sim=itemView.findViewById(R.id.sim);
tv=itemView.findViewById(R.id.tv);
}
}
}
初始化Fresco
public class Myapp extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
封装基类
public abstract class BaseActivity<T extends Mipp> extends Activity{
T presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createpresenter();
}
protected abstract void createpresenter();
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter!=null)
{
presenter.detach();
}
}
}
activity方法
public class MainActivity extends BaseActivity<Mypresenter> implements Iview {
int num=10;
XRecyclerView xrv;
Mypresenter mypresenter;
Handler handler;
Myadpter adpter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
presenter.getData();
}
private void initData() {
xrv=findViewById(R.id.rv);
xrv.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
num+=5;
adpter.notifyDataSetChanged();
xrv.refreshComplete();
}
@Override
public void onLoadMore() {
num++;
presenter.getData();
adpter.notifyDataSetChanged();
xrv.loadMoreComplete();
}
});
}
@Override
protected void createpresenter() {
presenter=new Mypresenter(this);
}
@Override
public void showView(List<User.NewslistBean> list) {
LinearLayoutManager mgs = new LinearLayoutManager(this);
xrv.setLayoutManager(mgs);
xrv.setAdapter(new Myadpter(MainActivity.this,list));
}
@Override
public int getNum() {
return 0;
}
}
model层方法
public interface Imodel {
void setData(int num,Observer observer);
}
public class ImodelBack implements Imodel{
@Override
public void setData(int num, Observer observer) {
OkHttpClient okHttpClient=new OkHttpClient.Builder().build();
RetrofitManager.getInstance(RequestApi.BASE_URL,okHttpClient)
.setCreate(RequestApi.class)
.getObservable(num)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(observer);
}
}
presenter 层方法
public interface Mipp<T>{
void attach(T view);
void detach();
}
public class Mypresenter implements Mipp<Iview>{
Iview iview;
ImodelBack imodelBack;
SoftReference<Iview> reference;
public Mypresenter(Iview iview){
this.iview=iview;
imodelBack=new ImodelBack();
attach(iview);
}
public void getData(){
int num=reference.get().getNum();
imodelBack.setData(num, new Observer<User>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(User user) {
List<User.NewslistBean> list=user.getNewslist();
reference.get().showView(list);
}
});
}
@Override
public void attach(Iview view) {
reference=new SoftReference<Iview>(view);
}
@Override
public void detach() {
reference.clear();
}
}
网络地址
public interface RequestApi {
public static final String BASE_URL = "http://api.tianapi.com/";
@GET("nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10")
Observable<User> getObservable(@Query("num") int num);
}
封装retrofit
public class RetrofitManager {
private Retrofit mRetrofit;
private String baseUrl;
OkHttpClient client;
private static RetrofitManager mRetrofitManager;
private RetrofitManager(String baseUrl, OkHttpClient client)
{
this.baseUrl=baseUrl;
this.client=client;
initRetrofit();
}
public static synchronized RetrofitManager getInstance(String baseUrl,OkHttpClient client)
{
if (mRetrofitManager==null)
{
mRetrofitManager=new RetrofitManager(baseUrl,client);
}
return mRetrofitManager;
}
private void initRetrofit() {
mRetrofit=new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
}
public <T> T setCreate(Class<T> reqServer){
return mRetrofit.create(reqServer);
}
}
view层方法
public interface Iview {
void showView(List<User.NewslistBean> list);
int getNum();
}
网友评论