OkHttp+Banner+RecyclerView

本文介绍如何利用OkHttp进行网络数据请求,并结合Gson解析JSON数据,同时展示了如何实现Banner轮播功能及RecyclerView适配器的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一,先导入依赖包

compile 'com.squareup.okio:okio:1.5.0'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'com.google.code.gson:gson:2.8.2'

第二,导入utils包

   五个类(GsonArrayCallback.java,GsonObjectCallback.java,NetWorkUtils.java,OkHttp3Utils.java,MyApp.java)

  注意:如果使用ImageLoader加载图片时,下面两行代码写到MyApp中

         

ImageLoaderConfiguration de=ImageLoaderConfiguration.createDefault(getApplicationContext());
ImageLoader.getInstance().init(de);


第三,添加权限

 

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

activity_main XML中:

      

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_shop"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.bwie.dierzhoumoni.ShopActivity">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <EditText
            android:hint="输入搜索关键词"
            android:gravity="center"
            android:layout_width="280dp"
            android:layout_height="50dp" />
        <Button
            android:id="@+id/qiehuan"
            android:text="切换"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <com.youth.banner.Banner
        android:id="@+id/mybanner"
        android:layout_width="match_parent"
        android:layout_height="150dp"></com.youth.banner.Banner>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/id_recyclerview"

        android:divider="#ffff0000"
        android:dividerHeight="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

item_home中:

    

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/image"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView

        android:id="@+id/id_num"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="1111111" />
</LinearLayout>

MainActivity:

public class ShopActivity extends AppCompatActivity {
    String mpath="http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage";
    String path="http://api.tianapi.com/social/?key=71e58b5b2f930eaf1f937407acde08fe&num=20";
    private Banner mbanner;
    List mlist=new ArrayList();
    List<HomeBean.DataBean.Ad1Bean> ad1;
    private RecyclerView mRecyclerView;
    private List<NewBean.NewslistBean> mDatas;
    private HomeAdapter mAdapter;
    private Button qiehuan;
    private boolean b=true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shop);

        mbanner= (Banner) findViewById(R.id.mybanner);
        getData(mpath);
        getdata();
        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
        //mRecyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,4));
        //添加分割线
        mRecyclerView.addItemDecoration(new DividerItemDecoration(
               ShopActivity.this, DividerItemDecoration.VERTICAL));
        mRecyclerView.addItemDecoration(new DividerItemDecoration(
                ShopActivity.this, DividerItemDecoration.HORIZONTAL));
        qiehuan= (Button) findViewById(R.id.qiehuan);
        //点击切换
        qiehuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               if(b==false)
               {
                   mAdapter = new HomeAdapter();
                   mRecyclerView.setLayoutManager(new GridLayoutManager(ShopActivity.this,4));
                   mRecyclerView.setAdapter(mAdapter);
                   b=true;

               }else{
                   mAdapter = new HomeAdapter();
                   mRecyclerView.setLayoutManager(new LinearLayoutManager(ShopActivity.this));
                   mRecyclerView.setAdapter(mAdapter);
                   b=false;

               }
            }
        });
    }
  //无限轮播
 private void getData(String mpath)
    {
        OkHttp3Utils.getInstance().doGet(mpath, new GsonObjectCallback<HomeBean>() {
            @Override
            public void onUi(HomeBean homeBean) {
                for(int i=0; i<homeBean.getData().getAd1().size();i++){
                    String ad1s = homeBean.getData().getAd1().get(i).getImage();
                    mlist.add(ad1s);
                }
                //设置图片加载器
                mbanner.setImageLoader((ImageLoaderInterface) new GlideImageLoader());
                mbanner.setImages(mlist);
                mbanner.start();

            }

            @Override
            public void onFailed(Call call, IOException e) {

            }
        });

    }
   //请求数据
 private void getdata()
    {
        OkHttp3Utils.getInstance().doGet(path, new GsonObjectCallback<NewBean>() {
            @Override
            public void onUi(NewBean newBean) {
                mDatas=newBean.getNewslist();
               mAdapter = new HomeAdapter();
               mRecyclerView.setAdapter(mAdapter);
               mRecyclerView.setLayoutManager(new LinearLayoutManager(ShopActivity.this));
            }

            @Override
            public void onFailed(Call call, IOException e) {

            }
        });
    }
    class HomeAdapter extends RecyclerView.Adapter<MyViewHolder>{

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    ShopActivity.this).inflate(R.layout.item_home, parent,
                    false));
            return holder;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.tv.setText(mDatas.get(position).getTitle());
            //ImageLoader imageLoader=ImageLoader.getInstance();
            ImageLoader.getInstance().displayImage(mDatas.get(position).getPicUrl(),holder.imageView);
        }

        @Override
        public int getItemCount() {
            return mDatas.size();
        }
    }
    class MyViewHolder extends RecyclerView.ViewHolder
    {

        TextView tv;
        ImageView imageView;

        public MyViewHolder(View view)
        {
            super(view);
            tv = (TextView) view.findViewById(R.id.id_num);
            imageView=(ImageView) view.findViewById(R.id.image);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值