美文网首页
2018-07-23

2018-07-23

作者: 我大大个 | 来源:发表于2018-07-23 08:02 被阅读0次

请求的是网络数据所以需要一些依赖

//okhhtp的依赖

        implementation'com.squareup.okhttp3:okhttp:3.11.0'

//图片加载的依赖

        implementation'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

//recyclerview的依赖

        implementation'com.android.support:recyclerview-v7:28.0.0-alpha3'

        implementation'com.android.support:design:28.0.0-alpha3'

//gson解析的依赖

        implementation'com.google.code.gson:gson:2.8.5'

//网络日志拦截器

        implementation'com.squareup.okhttp3:logging-interceptor:3.11.0'

//RecyclerView 上啦加载下拉刷新 https://github.com/XRecyclerView/XRecyclerView

        implementation('com.jcodecraeer:xrecyclerview:1.5.9') {

exclude group:'com.android.support'

        }

//导入Glide版本记得使用此版本

        implementation'com.github.bumptech.glide:glide:3.8.0'

//轮播图 https://github.com/youth5201314/banner

        implementation'com.youth.banner:banner:1.4.10'

        因为是网络请求所以  用的是OkHttp  所以封装了简单的工具类 之前的博客中有相关的代码

由于是网络请求所以   又有相关的bean层  但是请求内容不一样

一.1. 轮播图的bean包import android.app.Application;

public class BannerData {

public Listdata;

}

2.banner中的分层

public class BannerImage {

public Stringdesc;

public int id;

public StringimagePath;

public int isVisible;

public int order;

public Stringtitle;

public int type;

public Stringurl;

}

二.展示  列表的bean包

2.1

public class RootData {

public int status;

public Stringmessage;

public Listdata;

}

2.2

public class Shop {

public String_id;

public int id;

public Stringname;

public int month_sales;

public Stringmonth_sales_tip;

public double wm_poi_score;

public double delivery_score;

public double quality_score;

public double pack_score;

public double food_score;

public Stringdelivery_time_tip;

public Stringthird_category;

public Stringpic_url;

public Stringshopping_time_start;

public Stringshopping_time_end;

public int min_price;

public Stringmin_price_tip;

public int shipping_fee;

public Stringshipping_fee_tip;

public Stringbulletin;

public Stringaddress;

public Stringcall_center;

public Stringdistance;

public Stringaverage_price_tip;

public int comment_number;

public Stringlng;

public Stringlat;

public int __v;

public Stringcreated_at;

}

由于轮播图的展示运用Glide  所以下面操作很重要

1.声名了 App的类继承了Application    三级缓存 二次采样

public class Appextends Application {

public static Contextcontext;

@Override

    public void onCreate() {

super.onCreate();

context =this;

//初始化加载图片

        initLoader();

}

private void initLoader() {

String path = Environment.getExternalStorageDirectory() +"Image";

File cache =new File(path);

ImageLoaderConfiguration config =new ImageLoaderConfiguration.Builder(context)

.memoryCacheExtraOptions(480,800)

.diskCacheExtraOptions(480,800,null)

.threadPoolSize(3)

.threadPriority(Thread.NORM_PRIORITY -2)

.memoryCache(new LruMemoryCache(2 *1024 *1024))

.memoryCacheSize(2 *1024 *1024)

.memoryCacheSizePercentage(13)

.diskCache(new UnlimitedDiskCache(cache))

.diskCacheSize(50 *1024 *1024)

.diskCacheFileCount(100)

.diskCacheFileNameGenerator(new Md5FileNameGenerator())

.writeDebugLogs()

.build();

ImageLoader.getInstance().init(config);

}

//图片处理

    public static DisplayImageOptions getOptions () {

DisplayImageOptions options =new DisplayImageOptions.Builder()

.showImageOnLoading(R.mipmap.ic_launcher)

.showImageForEmptyUri(R.mipmap.ic_launcher)

.showImageOnFail(R.mipmap.ic_launcher)

.resetViewBeforeLoading(false)

.delayBeforeLoading(0)

.cacheInMemory(true)

.cacheOnDisk(true)

.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)

.bitmapConfig(Bitmap.Config.ARGB_8888)

.displayer(new RoundedBitmapDisplayer(300))

.handler(new Handler())

.build();

return options;

}

}

2.又创建了一个简单的Glide的工具类

public class GlideImageloaderextends ImageLoader {

@Override

    public void displayImage(Context context, Object path, ImageView imageView) {

//Glide 简单加载图片的方法

//通过类来获得图片

        Glide.with(context).load(((BannerImage)path).imagePath).into(imageView);

}

}

3.适配器

public class ShopAdapterextends RecyclerView.Adapter {

Listdata;

Contextcontext;

LayoutInflaterinflater;

ImageLoaderimageLoader;

DisplayImageOptionsoptions;

public ShopAdapter(Context context) {

this.data  =new ArrayList<>();

this.context = context;

this.inflater = LayoutInflater.from(context);

options =new DisplayImageOptions.Builder()

.cacheInMemory(true)

.cacheOnDisk(true)

.build();

imageLoader = ImageLoader.getInstance();

}

/**

* 添加数据

*

    * @param list

    */

    public void addData(List list) {

this.data.addAll(list);

notifyDataSetChanged();

}

@NonNull

@Override

    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,int i) {

View view =

inflater.inflate(R.layout.item_list,viewGroup,false);

return new ShopViewHolder(view);

}

@Override

    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder,int i) {

Shop shop =data.get(i);

/**

* java 中的instanceof 运算符是用来在运行时指出对象是否

* 是特定类的一个实例。instanceof通过返回一个布尔值来指出,

* 这个对象是否是这个特定类或者是它的子类的一个实例。

*/

        if (viewHolderinstanceof ShopViewHolder){

ShopViewHolder holder = (ShopViewHolder) viewHolder;

holder.textView.setText(shop.name);

imageLoader.displayImage(shop.pic_url,holder.imageView,options);

}

}

@Override

    public int getItemCount() {

return data.size();

}

/**

* 静态内部类  适配器的自定义ViewHolder

*/

    static class ShopViewHolderextends RecyclerView.ViewHolder{

ImageViewimageView;

TextViewtextView;

public ShopViewHolder(@NonNull View itemView) {

super(itemView);

imageView = itemView.findViewById(R.id.img_shop);

textView = itemView.findViewById(R.id.txt_shop);

}

}

}

4.接下来是重头戏   主页面显示内容

public class ShopActivityextends AppCompatActivity {

private XRecyclerViewxRecyclerView;

int page =0;

ShopAdaptershopAdapter;

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_shop);

initView();

getData(page);

getBannerData();

}

private void initView() {

xRecyclerView = findViewById(R.id.xRecycler);

xRecyclerView.setLoadingMoreEnabled(true);//加载更多

        xRecyclerView.setPullRefreshEnabled(true);//下拉刷新

//监听

        xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {

//刷新

            @Override

            public void onRefresh() {

page =0;

getData(page);

}

//加载

            @Override

            public void onLoadMore() {

page++;

getData(page);

}

});

//布局管理器

        LinearLayoutManager manager =new LinearLayoutManager(this);

manager.setOrientation(LinearLayoutManager.VERTICAL);

xRecyclerView.setLayoutManager(manager);

//分割线

        xRecyclerView.addItemDecoration(new DividerItemDecoration(this, OrientationHelper.VERTICAL));

//适配器

        shopAdapter =new ShopAdapter(this);

xRecyclerView.setAdapter(shopAdapter);

}

public void getData(int page) {

Ok.getOk().doGet("http://39.108.3.12:3000/v1/restaurants?offset="+page+"&limit=10&lng=116.29845&lat=39.95933",new OkCallBack() {

@Override

            public void onUI(String json) {

Gson gson =new Gson();

RootData rootData = gson.fromJson(json, RootData.class);

shopAdapter.addData(rootData.data);

//加载完成

                xRecyclerView.refreshComplete();

xRecyclerView.loadMoreComplete();

}

@Override

            public void failed(String json) {

//加载完成

                xRecyclerView.refreshComplete();

xRecyclerView.loadMoreComplete();

}

});

}

/**

* 获得图片

*/

    public void getBannerData(){

Ok.getOk().doGet("http://www.wanandroid.com/banner/json",new OkCallBack() {

@Override

            public void onUI(String json) {

Gson gson =new Gson();

BannerData bannerData = gson.fromJson(json, BannerData.class);

//添加轮播图

                View view = View.inflate(ShopActivity.this, R.layout.layout_banner,null);

Banner banner = view.findViewById(R.id.banner);

//设置图片加载器

                banner.setImageLoader(new GlideImageloader());

banner.setImages(bannerData.data);

//设置方法全部调用完毕时最后调用

                banner.start();

xRecyclerView.addHeaderView(view);

}

@Override

            public void failed(String json) {

}

});

}

}

相关文章

网友评论

      本文标题:2018-07-23

      本文链接:https://www.haomeiwen.com/subject/djldmftx.html