网络请求:Retrofit    地址: https://github.com/square/retrofit
图片加载:Glide       地址: https://github.com/bumptech/glide
数据解析:Gson
1.添加依赖:
Retrofit
    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
Glide 
//工程的build.gradle文件中
repositories {mavenCentral()
}
//Module的build.gradle文件中
dependencies {compile 'com.github.bumptech.glide:glide:3.7.0'compile 'com.android.support:support-v4:19.1.0'
}
网络请求需要权限
    <uses-permission android:name="android.permission.INTERNET"/>
2.准备数据
图片数据来源:易源数据( https://www.showapi.com/)300次每天
http://route.showapi.com/197-1?showapi_appid=34276&showapi_sign=731d68d6d56b4d789d6571f530ee28ef&num=10
请求地址分为几部分:
    https://www.showapi.com/ //接口基地址197-1 //接口地址showapi_appid //易源应用IDshowapi_sign  //身份验证num  //每页返回的数据条数page //页数(非必须)
访问上述网址,获得Json数据,使用Gson的GsonFormat插件将Json数据转换为GirlBean对象
3.Retrofit的使用
@Query、@QueryMap://用于Http Get请求传递参数
@Field://用于Post方式传递参数,需要在请求接口方法上添加@FormUrlEncoded,即以表单的方式传递参数
@Body: //用于Post,根据转换方式将实例对象转化为对应字符串传递参数.//比如Retrofit添加GsonConverterFactory则是将body转化为gson字符串进行传递
@Path: //用于URL上占位符
@Part: //配合@Multipart使用,一般用于文件上传
@Header://添加http header
@Headers://跟@Header作用一样,只是使用方式不一样,@Header是作为请求方法的参数传入,@Headers是以固定方式直接添加到请求方法上POST请求
3.1自定义请求接口
public interface ApiService {@POST("197-1")@FormUrlEncodedCall<GirlBean> getGirls(@Field("showapi_appid") String showapi_appid,@Field("showapi_sign") String showapi_sign,@Field("num") int num ,@Field("page") int page);
//    //GET请求
//    @GET("197-1")
//    Call<GirlBean> getGirls(@Query("showapi_appid") String showapi_appid,
//                            @Query("showapi_sign") String showapi_sign,
//                            @Query("num") int num ,
//                            @Query("page") int page);}
3.2请求数据
定义一个类,用于Retrofit请求数据
public class GirlsRequest {public static final String baseurl = "http://route.showapi.com/";public static final String showapi_appid = "34276";public static final String showapi_sign = "731d68d6d56b4d789d6571f530ee28ef";public static final int num = 10;//创建Retrofit对象Retrofit mRetrofit = new Retrofit.Builder().baseUrl(baseurl)//请求基地址//添加转换器,直接将内容转换成String或者json//.addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();public void getGirlList(final RequsetCallback requsetCallback, int page) {//创建请求的接口ApiService mApiService = mRetrofit.create(ApiService.class);Call<GirlsBean> mCall = mApiService.getGirls(showapi_appid,showapi_sign,num,page);//利用Call对象,发起网络请求mCall.enqueue(new Callback<GirlsBean>() {//请求成功@Overridepublic void onResponse(Call<GirlsBean> call, Response<GirlsBean> response) {//成功获得正确数据if (response.body().getShowapi_res_code() == 200) {requsetCallback.onFinish(response.body());} else {//错误数控requsetCallback.onError(response.body().getShowapi_res_error());}}//失败@Overridepublic void onFailure(Call<GirlsBean> call, Throwable t) {requsetCallback.onError("网络请求失败");}});}//自定义回调接口public interface RequsetCallback<T>{void onFinish(T data);void onError(String msg);}
}
4.显示数据
Glide的使用: http://www.cnblogs.com/guilin-hu/p/5706916.html
a).网络加载图片到ImageView中
Glide.with(context).load(imageUrl).into(imageView);
b). 当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片
Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);
c). 当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示
Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);
图片列表使用RecyclerView 实现
在适配器中的onBindViewHolder方法中使用Glide设置图片
    @Overridepublic void onBindViewHolder(final MyViewHolder holder, int position) {//Glide设置图片(未加载则用粉色替代)Glide.with(mContext).load(mList.get(position).getPicUrl()).centerCrop().placeholder(R.color.colorAccent).into(holder.mImageView);}
5.完成加载图片的功能
public class MainActivity extends AppCompatActivity implements GirlsRequest.RequsetCallback<GirlsBean>{private  RecyclerView mRecyclerView;private MyAdapter mAdapter;private GridLayoutManager mGridLayoutManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);//RecyclerView 设置行列mGridLayoutManager = new GridLayoutManager(this,2);//VERTICAL代表有多少列,HORIZONTAL就代表有多少行,mRecyclerView.setLayoutManager(mGridLayoutManager);GirlsRequest request = new GirlsRequest();//调用getGirlList方法请求数据request.getGirlList(this,1);}@Overridepublic void onFinish(GirlsBean data) {//得到适配器mAdapter = new MyAdapter(this,data.getShowapi_res_body().getNewslist());//设置适配器mRecyclerView.setAdapter(mAdapter);}@Overridepublic void onError(String msg) {//吐司错误信息Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();}
}
详细代码: https://github.com/897532167/LoadNetworkPicture
如有兴趣可看: 妹子图APP(二)—— SwipeRefreshLayout+RecyclerView下拉刷新上拉加载
暂时的效果

妹子图APP(一)—— Retrofit+Glide+Gson加载网络图片相关推荐

  1. Android使用Glide框架加载网络图片(解决无报错图片不显示问题)

    清单文件中添加访问网络权限并防止图片不显示 activity加载自己云服务器网页图片 package com.example.app3;import androidx.appcompat.app.Ap ...

  2. 妹子图APP(四)—— SQLite保存数据实现离线图片查看

    接上文: 妹子图APP(三)-- RecyclerView的Item点击事件和图片保存至本地 前面实现了加载网络图片并保存至本地,但无法实现离线查看已缓存的图片,现在需要实现离线查看缓存的图片 Gli ...

  3. 超棒的Glide图片加载

    GitHub开源:https://github.com/bumptech/glide 超棒的工具,竟然还可以加载.gif !!Glide完全基于Picasso,沿袭了其简洁风格,并在其基础上做了大量优 ...

  4. Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide开源组件加载网络图片的优缺点比较...

    在android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加载网络图片.在这里我主要介绍一下我自己在使用Volley, Picasso, U ...

  5. Android Glide图片加载框架(二)源码解析之with()

    文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...

  6. Android开发笔记(一百七十一)使用Glide加载网络图片

    如何方便而又快速地显示网络图片,一直是安卓网络编程的热门课题,前些年图片缓存框架Picasso.Fresco等等大行其道,以至于谷歌按捺不住也开发了自己的Glide开源库.由于Android本身就是谷 ...

  7. 加载网络图片Glide+圆角 fragment的动态添加 底部图标点击选中

    一.加载网络图片Glide+圆角 1.添加网络请求. <!-- 添加权限 --><uses-permission android:name="android.permiss ...

  8. Glide图片加载框架的使用

    1. 介绍 Glide是一个快速高效的Android图片加载库,注重于平滑的滚动.Glide提供了易用的API,高性能.可扩展的图片解码管道(decode pipeline),以及自动的资源池技术.G ...

  9. Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78357251 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

最新文章

  1. 2020年全国压岁钱榜单出炉,今年小朋友压岁钱归谁?
  2. linux-basic(6)linux的文件权限与目录配置
  3. 小旭的互联网营销之微信营销
  4. 【连载】如何掌握openGauss数据库核心技术?秘诀三:拿捏存储技术(3)
  5. java对象的内存分配_java对象在内存的分配问题
  6. JS - Math对象
  7. 监听独立于数据库服务器的配置,解决ORA-12520及ORA-12545错误
  8. centos服务器修改密码,linux centos默认的密码
  9. Mysql CPU占用100%查询
  10. Excel·VBA考勤打卡记录统计结果
  11. 猜数游戏,随机生成一个1~100的数进行猜测。
  12. 深入浅出Apache DolphinScheduler
  13. 托福艺术导向(纪录片《文明》单词总结)PART1
  14. APP开发-第三方SDK使用
  15. 半角和全角的区别 java_全角和半角区别
  16. 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照
  17. 开脑洞:数字文明的等级
  18. 中文颜色名称与RGB颜色对照表
  19. 【路径规划】基于蚁群算法求解运钞车路径规划VRPSD问题matlab代码
  20. 电脑无法访问网页,但qq可以用?一篇文章帮你解决(非常详细)

热门文章

  1. 博客专家3月原创奖励
  2. python获取arduino数据可视化_Arduino数据可视化在实验教学中的应用
  3. GitLab 中编辑 Markdown 写README技巧
  4. 中科院计算机博士论文致谢火了!网友:读完已是泪流满面……
  5. (Hankson的逆问题)
  6. 详解win10开机启动慢是什么原因怎么解决
  7. 解决小问题的记录:我戴尔笔记本电脑用键盘调不了亮度了(已解决)
  8. Linux云计算学习教程,一个全新的世界—Linux
  9. 火影智能AI伪原创插件伪原创源码
  10. java 读取sqlite_在Java中使用Sqlite数据库