mvp+rxjava+retrofit+okhttp

来源:互联网 发布:淘宝怎么给快递差评 编辑:程序博客网 时间:2024/05/17 16:11
//添加依赖compile 'com.squareup.retrofit2:retrofit:2.0.1'compile 'com.squareup.retrofit2:converter-gson:2.0.1'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'compile 'com.android.support:recyclerview-v7:26.+'compile 'io.reactivex:rxandroid:1.1.0'compile 'com.facebook.fresco:fresco:0.12.0'compile 'com.jakewharton:butterknife:7.0.1'//网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>//注册App
<application    android:name=".APP"
public class Api {    public static  final  String PATH="http://tingapi.ting.baidu.com/";}

public interface ApiService {    @GET("v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")    Observable<MyBean> getdatas();} Model
public interface Imodel {    void  Request(String url, Onclick onclick);}
import java.util.List;import okhttp3.OkHttpClient;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Observable;import rx.Observer;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;

public class model implements Imodel{    private Retrofit retrofit;    private ApiService apiService;    private Observable<MyBean> noParams;    @Override    public void Request(String url, final Onclick onclick) {        OkHttpClient okHttpClient = new OkHttpClient.Builder()                .addInterceptor(new LoggingInterceptor())                .build();        retrofit = new Retrofit.Builder()                .baseUrl(Api.PATH)                .client(okHttpClient)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        //通过动态代理得到网络接口对象        apiService = retrofit.create(ApiService.class);        noParams = apiService.getdatas();        noParams.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<MyBean>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                        onclick.error(e.getMessage().toString());                    }                    @Override                    public void onNext(MyBean bean) {                        List<MyBean.SongListBean>data=bean.getSong_list();                        onclick.datasuccess(data);                    }                });    }}
public interface Onclick {    void  datasuccess(List<MyBean.SongListBean> list);    void  error(String rr);}Persenter 
 
public class Presenter {    Imodel imodel;    Iview iview;    public Presenter( Iview iview) {        this.iview = iview;        imodel=new model();    }    public  void getok(String url){        imodel.Request(url, new Onclick() {            @Override            public void datasuccess(List<MyBean.SongListBean> list) {                iview.showList(list);            }            @Override            public void error(String rr) {                iview.showError(rr);            }        });    }}
View
public interface Iview {    void showList(List<MyBean.SongListBean> list);    void showError(String e);}
//因为是Fresco所以需要使用APP
public class APP extends Application{    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}
//网络拦截器

public class LoggingInterceptor implements Interceptor {    private static final String UA = "User-Agent";    @Override    public Response intercept(Chain chain) throws IOException {        Request request = chain.request()                .newBuilder()                .addHeader(UA, makeUA())                .build();        return chain.proceed(request);    }    private String makeUA() {        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;    }}//Adapter类
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.bawei.mvprjo.R;import com.bawei.mvprjo.bean.MyBean;import com.facebook.drawee.view.SimpleDraweeView;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{    List<MyBean.SongListBean> list;    Context context;    public Adapter(List<MyBean.SongListBean> list, Context context) {        this.list = list;        this.context = context;    }    @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.itemImg.setImageURI(list.get(position).getPic_big());        holder.title.setText(list.get(position).getTitle());        holder.name.setText(list.get(position).getAuthor());    }    @Override    public int getItemCount() {        return list.size();    }    static class ViewHolder extends RecyclerView.ViewHolder {        @Bind(R.id.item_img)        SimpleDraweeView itemImg;        @Bind(R.id.title)        TextView title;        @Bind(R.id.name)        TextView name;        ViewHolder(View view) {            super(view);            ButterKnife.bind(this, view);        }    }}

//主界面
 
public class MainActivity extends AppCompatActivity implements Iview{    private RecyclerView re;    private Presenter presenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        re = (RecyclerView) findViewById(R.id.re);        presenter = new Presenter(MainActivity.this);        presenter.getok(Api.PATH);    }    @Override    public void showList(List<MyBean.SongListBean> list) {        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);        re.setLayoutManager(linearLayoutManager);        Adapter adapter=new Adapter(list,MainActivity.this);        re.setAdapter(adapter);    }    @Override    public void showError(String e) {    }}
//自己添加bean包
//布局页面
<android.support.v7.widget.RecyclerView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/re"    ></android.support.v7.widget.RecyclerView>

//item
<com.facebook.drawee.view.SimpleDraweeView    android:id="@+id/item_img"    android:layout_width="150dp"    android:layout_height="150dp"    android:layout_margin="8dp"    fresco:failureImage="@mipmap/ic_launcher" /><TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/title"    android:text="aaaaaa"    /><TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/name"    android:text="aaaaaa"    />





原创粉丝点击