//添加依赖 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(); } Modelpublic 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); } Persenterpublic 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); } }); } }Viewpublic interface Iview { void showList(List<MyBean.SongListBean> list); void showError(String e); }//因为是Fresco所以需要使用APPpublic 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" />
mvp+rxjava+retrofit+okhttp
最新推荐文章于 2025-03-09 19:43:31 发布