随机获取猫图APP

[TOC]

安卓实验:随机猫图

安卓实验:随机猫图:cat:

使用技术:RecycleView,Glide

运行效果

Screenshot_20201124_224008_com.demo.catws

遇到的待解决的问题

  • Oncreate里给RecycleView传入了八张初始图片,并没有按照瀑布流显示,而是排成了一行
  • 运行点击函数后才刷新成设置的两列

拟解决办法,oncreate里面调用一个刷新函数,函数执行notifyItemChanged(0)

实际未改变,希望他刷新布局

并未解决

*

  • 点击函数里清空了items数组,使用myadaper?.notifyItemInserted(data.size-1)报错越界

    使用myadaper!!.notifyItemChanged(data.size-1)反而正常

猜想,data数组更新了,但是适配器里的数组还保存着原来的数据,调用notify函数后才更新对应位置数据

所以主页面里按data空数组下标从0开始插入反而报错

报错日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
D/TAG---->得到第 0 个图片链接:: https://24.media.tumblr.com/tumblr_lwwcqwNiyE1r0mbi6o1_500.jpg
D/TAG---->得到第 1 个图片链接:: https://25.media.tumblr.com/tumblr_ll6oplOJki1qjahcpo1_500.jpg
D/TAG---->重置了第1 个图片链接::
D/TAG---->得到第 2 个图片链接:: https://25.media.tumblr.com/tumblr_ln7y9yW8hn1qdth8zo1_500.jpg
D/TAG---->得到第 3 个图片链接:: https://s3.us-west-2.amazonaws.com/cdn2.thecatapi.com/images/PfA5hN4En.jpg
D/TAG---->得到第 4 个图片链接:: https://s3.us-west-2.amazonaws.com/cdn2.thecatapi.com/images/1XJ21J4EE.jpg
D/TAG---->得到第 5 个图片链接:: https://s3.us-west-2.amazonaws.com/cdn2.thecatapi.com/images/2B3n7I5u2.jpg
D/TAG---->得到第 6 个图片链接:: https://s3.us-west-2.amazonaws.com/cdn2.thecatapi.com/images/0xvhPJ8pd.jpg
D/TAG---->得到第 7 个图片链接:: https://s3.us-west-2.amazonaws.com/cdn2.thecatapi.com/images/6X-Rt4SAF.jpg
D/Tag: 执行了onBindViewHolder
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.demo.catws, PID: 23693
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 7(offset:8).state:8 androidx.recyclerview.widget.RecyclerView{abf2cbd VFED..... ......ID -72,246-1155,2109 #7f070083 app:id/recycle},
1
2
3
4
5
6
7
//图片加载函数
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
Log.d("Tag","执行了onBindViewHolder")

Glide.with(myContext).load(items[position]).into(holder.imgview)

}

1.0版本:解析获取xml中的一个图片链接并显示

未使用布局及图片加载库

效果图

  • 点击按钮向api接口请求xml数据
  • 当从xml中解析出图片url地址后左上角显示:
    “猫猫图正在向您走来”
  • 从url中读取到图片后,显示图片链接与图片到ui上

image-20201124200224064

业务代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
fun lookCat(v:View) = Thread(){
val url="https://api.thecatapi.com/api/images/get?format=xml&size=med&results_per_page=1"
//读取并格式化返回的xml
val xmlString = URL(url).readText()
val parserFactory: XmlPullParserFactory = XmlPullParserFactory.newInstance()
val parser: XmlPullParser = parserFactory.newPullParser()
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true)
parser.setInput(StringReader(xmlString))
var tag: String?
var text = ""
var bytes:ByteArray?
var event = parser.eventType
//开始解析返回的xml,此处因为url设置results_per_page=1,返回的xml只有一个image节点即一张图片链接
while (event != XmlPullParser.END_DOCUMENT) {
tag = parser.name
when (event) {
XmlPullParser.TEXT -> text = parser.text
XmlPullParser.END_TAG -> when (tag) {
"url" ->{
imgurl=text
timestart.text="猫猫图正在向您走来!"
Log.d("MainActivity","已读取完图片链接 :$imgurl ")
bytes = URL(text).readBytes()
runOnUiThread{
var text=imgurl
textView.text=text
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
Log.d("MainActivity","已读取完图片字节文件:$imgurl ")
imageView.setImageBitmap(bitmap)
imageView.isEnabled = true
}
}
}
}
//当xml存在多个子节点时生效,此时暂不生效
event = parser.next()
}

}.start()

}

随机获取猫图APP
https://darksheep404.github.io/2020/11/24/获取随机猫图APP/
作者
darksheep
发布于
2020年11月24日
许可协议