okhttp+Banner实现无限轮播

//首先要添加第三方依赖(我studio版本3.0)

     //banner版本
	implementation 'com.youth.banner:banner:1.4.9'

   //图片Glide
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    
   //http3
   implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    
   //imageloader
    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
然后别忘了添加权限
 <uses-permission android:name="android.permission.INTERNET" />
//创建一个图片加载的类  并继承Imageloader(记住imageloader用  com.youth.banner.loader.ImageLoader  这个包)

package com.example.day12;
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
    public class GlideImageLoader extends com.youth.banner.loader.ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}


//这里是banner实现方法

package com.example.day12;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.google.gson.Gson;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.youth.banner.Banner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
    private Banner banner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        banner = (Banner) findViewById(R.id.mybanner);

        getdate();
    }

    private void getdate() {

        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url("http://api.tianapi.com/meinv/?key=2a0024d1f7f558e09936f697580f1643&num=5")
                .build();
        Call call = okHttpClient.newCall(request);

        //用OkHttp里面的Call对象打点调用 异步请求数据的抽象方法
        call.enqueue(new Callback() {

            //建个集合用来存放图片url的地址
            private List<String> picUrlList;
            //此集合是bean解析过来的集合
            private List<Person.NewslistBean> list;


            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(Response response) throws IOException {

                //把数据流转换成json字符串
                String json = response.body().string();
                Log.e("++++++++","这是访问到的数据:"+json);
                //开始用gson解析
                Gson gson = new Gson();
                Person ladyBean = gson.fromJson(json, Person.class);
                //拿到bean类里的集合
                list = ladyBean.getNewslist();
                Log.e("++++++++","这是bean集合里的数据:"+list);

                //设全局此集合专门用来存放图片url地址的
                picUrlList = new ArrayList<String>();
                for (int i = 0; i < list.size(); i++) {
                    //循环把图片地址添加到string泛型的集合里
                    picUrlList.add(list.get(i).getPicUrl());
                }
                Log.e("++++++++","这是专门存放图片url集合里的数据:"+picUrlList);

                //子线程不能更新住UI
                //所以 【必须】 开启返回主线程的方法
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //把更新主UI视图的代码放这里面
                        //.setImagees(把图片地址集合)
                        //.setImageLoader(new你的Glid类)
                        banner.setImages(picUrlList).setImageLoader(new GlideImageLoader()).start();
                    }
                });
             
            }
        });
    }
}

//这是一个布局

 <com.youth.banner.Banner
        android:id="@+id/mybanner"
        android:layout_width="match_parent"
        android:layout_height="180dp"></com.youth.banner.Banner>

猜你喜欢

转载自blog.csdn.net/NorthHar/article/details/84023898