Я новичок в kotlin, так что, возможно, это очень легко решить.
Я пытаюсь отфильтровать ответ json, полученный с помощью Retrofit2, перед тем, как отобразить изображения в сетке.с RecyclerView.
instagram.com/explore/tags/{hashtag}/?__a=1&max_id=
Использование Retrofit2 Я могу получить точный ответ на данные, а также отобразить заданные изображения URL в RecyclerView.
Мне не удалось использоватьфильтр, карта, петли и условия для удаления элементов из Arraylist.Я не понимаю их в полной мере, но я искал решения, и это то, к чему я пришел.
Интерфейс
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
)
}
Простоопять же, я хочу просто удалить из массива элементы, которые соответствуют определенным вещам, чего я не хочу.Например.значение is_video, полученное из json.Я хочу пройти через arraylist и удалить все элементы, для которых is_video имеет значение true.
Спасибо