导入依赖
/*retrofit依赖*/
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
//若和观察者结合的话,需加上如下依赖:
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
/*fresco依赖*/
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.youth.banner:banner:1.4.9'
初始化Fresco
public class Myapp extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
清单文件
<!--网络权限-->
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
<!--注册图片,application里-->
android:name=".app.Myapp"
布局activity_main
<com.youth.banner.Banner
android:id="@+id/bn"
android:layout_width="match_parent"
android:layout_height="200dp">
</com.youth.banner.Banner>
封装Bean类
http://api.svipmovie.com/front/homePageApi/homePage.do
最好一键封装
BnUri
public interface BnUri {
/*注解,Get请求,接口后半部分,请求头在model里*/
@GET("homePageApi/homePage.do")
/*import retrofit2.Call;*/
Call<BnBean> getBnCall();
}
IBnModel
public interface IBnModel {
public void getData(Observer<BnBean> observer);
}
BnModel
public class BnModel implements IBnModel{
private BnBean bnBean;
@Override
public void getData(Observer<BnBean> observer) {
Observable.create(new Observable.OnSubscribe<BnBean>(){
@Override
public void call(final Subscriber<? super BnBean> subscriber) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.svipmovie.com/front/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build()
;
/*gaigaigai*/
BnUri bnUri = retrofit.create(BnUri.class);
Call<BnBean> call=bnUri.getBnCall();
call.enqueue(new Callback<BnBean>() {
@Override
public void onResponse(Call<BnBean> call, Response<BnBean> response) {
bnBean=response.body();
subscriber.onNext(bnBean);
subscriber.onCompleted();
}
@Override
public void onFailure(Call<BnBean> call, Throwable t) {
}
});
}
}).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);
}
}
IMainActivity
public interface IMainActivity {
public void showBnView(List<BnBean.RetBean.ListBean.ChildListBean> bnlist);
}
MainActivity
public class MainActivity extends AppCompatActivity implements IMainActivity {
private Banner mBn;
private List<BnBean.RetBean.ListBean.ChildListBean> bnlist;
private PersenterActivity persenterActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
persenterActivity = new PersenterActivity(this);
persenterActivity.getData();
bnlist = new ArrayList<>();
showBnView(bnlist);
}
private void initView() {
mBn = (Banner) findViewById(R.id.bn);
}
@Override
public void showBnView(List<BnBean.RetBean.ListBean.ChildListBean> bnlist) {
/*重点*/
ArrayList<String> pic = new ArrayList<>();
for (int i = 0; i < bnlist.size(); i++) {
pic.add(bnlist.get(i).getPic());
}
mBn.setImages(pic);
mBn.setImageLoader(new GlideImageLoader());
mBn.start();
}
}
PersenterActivity
public class PersenterActivity {
BnModel bnModel;
IMainActivity iMainActivity;
List<BnBean.RetBean.ListBean.ChildListBean> bnlist = new ArrayList<>();
public PersenterActivity(IMainActivity iMainActivity) {
this.iMainActivity = iMainActivity;
this.bnModel = new BnModel();
}
public void getData(){
bnModel.getData(new Observer<BnBean>() {
@Override
public void onCompleted() {
/* Log.i("1111111", "onCompleted()");*/
}
@Override
public void onError(Throwable e) {
Log.i("111111", "onError()"+e.toString());
}
@Override
public void onNext(BnBean bnBean) {
/* Log.i("111111", "onNext()");*/
bnlist.addAll(bnBean.getRet().getList().get(0).getChildList());
iMainActivity.showBnView(bnlist);
Log.i("111111", "onNext()" + bnlist);
}
});
}
}
图片加载器
public class GlideImageLoader extends ImageLoader{
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
/**
注意:
1.图片加载器由自己选择,这里不限制,只是提供几种使用方法
2.返回的图片路径为Object类型,由于不能确定你到底使用的那种图片加载器,
传输的到的是什么格式,那么这种就使用Object接收和返回,你只需要强转成你传输的类型就行,
切记不要胡乱强转!
*/
//用fresco加载图片简单用法,记得要写下面的createImageView方法
Uri uri = Uri.parse((String) path);
imageView.setImageURI(uri);
}
//提供createImageView 方法,如果不用可以不重写这个方法,主要是方便自定义ImageView的创建
@Override
public ImageView createImageView(Context context) {
//使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView
SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context);
return simpleDraweeView;
}
}
其实可以直接导入第三方工具类(Myapp,GlideImageLoader ,RetrofitManager)