Android综合小练习(一)
作为一名大二狗,学习编程无异于要常动手编写才能有所提升,所以这第一次写博客来记录,写的不好请见谅。
实现从网络获取数据并适配到APP中
实际GIF图:
(涉及到线程处理,网络请求,适配器,不太懂的话可以先查阅相关资料知识)
实现思路:
- 布局文件: 很简单一个Button以及一个RecyclerView(我选用了RecyclerView适配器,好用);数据bean布局文件。
- 主程序代码逻辑: 将uri放在子线程中进行网络请求处理,成功获取到字节流并从中提取我们所需要的数据,最后将获取到数据通过适配器显示结果。
- RecyclerView适配器: 继承RecyclerView类,重写其中方法实现将数据与适配器匹配。
布局文件:
主程序布局:
数据bean布局:
数据bean.class:
这个就不解释了,很简单。
主程序代码逻辑(详细):
首先,声明并绑定控件啦!
要实现点击按钮调用子线程进行网络请求,所以要对按钮监听以及启动子线程。(干活啦线程兄dei~)
线程处理有很多方式,我选择了一种简便方法,那就是AsyncTack类啦!使用这种方法可以很大程度的方便了编码,所以我们要创建一个类去继承AsyncTack实现我们要的东西。
会要求实现重写doInBackground()方法,所以就按要求来吧。简单的讲一下:
"String" 代表这你要传递处理的数据类型,
"Integer" 代表延迟处理时的进度数据类型,
*"List <ItemBean>" 代表处理完成后返回的数据类型,
所以此时我们创建了我们要的子线程类,但是会发现要求我们重写doInBackground()方法,此方法为何物呢?其实我们的延时处理都在此方法中实现。所以要在此方法中执行网络请求。
实现网络网络请求步骤:创建HttpURLConnection对象,通过URL地址打开链接,设置好请求方式,启动连接,此时会返回一个回应码。通过核实回应码判断是否连接成功,成功了在执行接下来解析JSON数据的任务。于是乎:
响应成功后获取的是字节流,若要取得想要的数据还需要进一步的处理(加油吧~)
创建InputStream对象获取返回的数据,然后通过BufferReader将字节流读取并存储在缓冲区中,以便我们后续操作:
然后就是处理获取到的数据啦!
通过查看JSON数据会发现它是一个Object数组数据,而每一个数组元素中又包含了不同值的属性,所以要创建对应的数组来获取我们需要的数据,至于大小取决于获取的Object数组大小。
然后创建数据bean列表用来存储每一个bean实例化对象,将对象适配到RecyclerView当中,从而显示结果。
由于在这里选择以项目资源图片形式加载图片(后面会通过创建一个解析JSON数据中每一张图片方法实现从内存中显示我们获取的位图)。
此时大致逻辑就实现了,但是有没有发现缺少了一点啥?那就是RecyclerView啦~,创建一个类继承RecyclerView来构建我们需要的适配器。
继承RecyclerView时候会发现要求我们重新onCreateViewHolder(),onBindViewHolder()和getItemCount()三个方法来实现符合我们的适配器,简单的说一下:
onCreateViewHolder(): 在此方法中需要将数据bean布局加载进来,创建ViewHoldr实例并将加载进来的布局传入到构造函数中,最后返回ViewHolder实例对象。
onBindViewHolder(): 用于对RecyclerView子项数据赋值,当子项被滚动到屏幕内会执行。
getIteamCount(): 用于返回RecyclerView中所有子项数目。
具体RecyclerView详细讲解,我放出一个网址提供参考:
https://www.jianshu.com/p/da23fe946ed1
于是乎,重写了三个方法后构建出所需要的适配器(很简单滴):
最后最后,那就是初始化适配器并设置好,然后就可以看到结果啦!
搞定,简单吧,后续我会进行代码的优化,所以加油吧!
完整代码截图: