我是Kotlin的新手,所以这可能是一个非常容易解决的问题。
我要做的是在使用RecyclerView在网格中显示图像之前,先过滤使用Retrofit2收到的json响应。
instagram.com/explore/tags/{hashtag}/?__a=1&max_id=
使用Retrofit2,我可以很好地获得数据响应,并在RecyclerView中显示给定的url图像。
我没有成功使用过滤器,映射,循环和条件从Arraylist中删除元素。我不明白这些的最大范围内,但我已经搜索寻找解决办法,而这些都是我想出APON。
接口
interface InstagramDataFetcher
{
@GET("tags/{tag}/?__a=1&max_id=")
fun getInstagramData(@Path("tag") hashtag: String) : Call <InstagramResponse>
}
我在哪里得到我的回应,也得到的StringIndexOutOfBoundsException
class InstagramFeedFragment : Fragment()
{
private fun onResponse()
{
val service = RestAPI.retrofitInstance?.create(InstagramDataFetcher::class.java)
val call = service?.getInstagramData("hashtag")
call?.enqueue(object : Callback<InstagramResponse>
{
override fun onFailure(call: Call<InstagramResponse>, t: Throwable)
{
Log.d("FEED", " $t")
}
override fun onResponse(
call: Call<InstagramResponse>, response: Response<InstagramResponse>
)
{
//for ((index, value) in data.withIndex())
if (response.isSuccessful)
{
var data: ArrayList<InstagramResponse.InstagramEdgesResponse>? = null
val body = response.body()
data = body!!.graphql.hashtag.edge_hashtag_to_media.edges
for ((index, value) in data.withIndex())
{
if(value.node.accessibility_caption[index].toString().contains("text") ||
value.node.accessibility_caption[index].toString().contains("person"))
{
data.drop(index)
}
}
recyclerView.adapter = InstagramGridAdapter(data, parentFragment!!.context!!)
}
}
})
}
}
这是我的模型课
data class InstagramResponse(val graphql: InstagramGraphqlResponse)
{
data class InstagramGraphqlResponse(val hashtag: InstagramHashtagResponse)
data class InstagramHashtagResponse(val edge_hashtag_to_media: InstagramHashtagToMediaResponse)
data class InstagramHashtagToMediaResponse(
val page_info: InstagramPageInfo,
val edges: ArrayList<InstagramEdgesResponse>
)
data class InstagramPageInfo(
val has_next_page: Boolean,
val end_cursor: String
)
data class InstagramEdgesResponse(val node: InstagramNodeResponse)
data class InstagramNodeResponse(
val __typename: String,
val shortcode: String,
val display_url: String,
val thumbnail_src: String,
val thumbnail_resources: ArrayList<InstagramThumbnailResourceResponse>,
val is_video: Boolean,
val accessibility_caption: String
)
data class InstagramThumbnailResourceResponse(
val src: String,
val config_width: Int,
val config_height: Int
)
}
再简单,我只想请从ArrayList中符合特定的东西是什么我不希望这样的元素。例如。来自json的“ is_video”值。我想通过在ArrayList和删除具有“is_video”作为真正的所有元素。
谢谢
答案 0 :(得分:0)
如果你问如何过滤列表,然后在下面的演示。
您只需要在filter
上使用data
,它是一个ArrayList。我尝试为模型保留相同的结构,以便您可以更好地理解。
fun main() {
val first = InstagramNodeResponse(
title = "first",
is_video = true
)
val second = InstagramNodeResponse(
title = "second",
is_video = false
)
val list: ArrayList<InstagramEdgesResponse> = arrayListOf(
InstagramEdgesResponse(node = first),
InstagramEdgesResponse(node = second)
)
val itemsWithVideo = list.filter { it.node.is_video == true }
val itemsWithoutVideo = list.filter { it.node.is_video == false }
println(itemsWithVideo.map { it.node.title }) // [first]
println(itemsWithoutVideo.map { it.node.title }) // [second]
}
// Models
data class InstagramEdgesResponse(val node: InstagramNodeResponse)
data class InstagramNodeResponse(
val title: String,
val is_video: Boolean
)