使用 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)
所以我正在研究 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)