使用 Retrofit 和 Picasso 的 Kotlin Display 图像阵列

Kotlin Display image array using Retrofit and Picasso

所以我正在研究 Android 电视我想使用 Retrofit API 检索图像然后将其保存在数组中并显示图像随时间变化。

我可以使用 Retrofit 检索数据,但我在尝试显示检索到的数据时遇到问题 它来自 Retrofit ,我试图用 Picasso 转换它,但也有一些问题。 我是 Kotlin 和 Android 的新手所以你能指导我完成这个

这是我的代码


class MainActivity : FragmentActivity() {

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var rf = Retrofit.Builder()
            .baseUrl(RetrofitInterface.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        var API = rf.create(RetrofitInterface::class.java)
        var call:Call<List<Post?>?>? = API.posts

        call?.enqueue(object:Callback<List<Post?>?>{
            override fun onResponse(call: Call<List<Post?>?>, response: Response<List<Post?>?>) {
                var postList : List<Post>? = response.body() as List<Post>
                var post = arrayOfNulls<String>(postList!!.size)

                for(i in postList!!.indices)
                    post[i] = postList!![i]!!.url


                var adapter = ArrayAdapter<String>(applicationContext,android.R.layout.simple_dropdown_item_1line,post)

//                val ListView = findViewById<ListView>(R.id.listview)
//                val ImageView = findViewById<ImageView>(R.id.imageView)
//                ListView.adapter = adapter
                setUI(adapter)
                //
            }

            override fun onFailure(call: Call<List<Post?>?>, t: Throwable) {
                TODO("Not yet implemented")
            }

        })
    }



    fun setUI(adapter: ArrayAdapter<String>) {
        // link with imageView
        val ImageView = findViewById<ImageView>(R.id.imageView)
      
       // local image
       // var imgResId= arrayOf(R.drawable.image1, R.drawable.image2,R.drawable.image4)
        var imgResId = arrayOf(adapter)
        object : Runnable {
            var updateInterval = 3000 //= 3 second
            var currentIndex = -1
            override fun run() {
                currentIndex += 1;
                if(currentIndex == imgResId.size){
                    currentIndex = 0;

                }
                ImageView.setImageResource(imgResId[currentIndex])
                ImageView.postDelayed(this, updateInterval.toLong())

            }
        }.run()
    }

}

fun setUI() 我可以使用本地图像显示图像,但 Retrofit 有问题

谢谢

ImageView.setImageResource(imgResId[currentIndex]) 来自 url 您必须使用 Picaso 或 Glide 进行设置 我建议您使用 Glide

fun loadImage(
activity: Context?, ivUser: ImageView, thumbnailImage: String?,
originalImage: String?
) {

activity?.let {
    Glide.with(it).load(originalImage)
        .apply(RequestOptions().placeholder(R.drawable.ic_profilepic_placeholder))
        .thumbnail(Glide.with(activity).load(thumbnailImage))
        .into(ivUser)
}
}

ImageView.loadImage(你的图片url)