Я звоню AsycnTask
внутри Adapter
, но при прокрутке RecyclerView
появляется какая-то ошибка, и это ошибка.
E/MainAdapter: getAttachment failed
java.lang.IllegalStateException: Cannot execute task: the task is already running.
и это мой код.
class MainAdapter(private dataSet: ArrayList<MyObject>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val disposable = CompositeDisposable()
// some stuff here...
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
disposable.add(
getApiService().getAttachment()
.subscribeOn(Schedulers.io())
.observerOn(AndroidSchedulers.mainThread())
.subscribe(
{ it ->
Log.i(TAG, "getAttachment success")
if (fileType.isImage) {
holder.imageLoader.execute(it.byteStream()) // the error is pointing here
} else if (fileType.isVideo) {
holder.videoLoader.execute(it.byteStream())
}
},
{
Log.e(TAG, "getAttachment fail", it)
}
)
)
}
class ItemViewHolder(itemView: View), OnMediaLoaderListener {
override fun onImageLoadFinish(bitmap: Bitmap) {
Glide.with(itemView)
.load(bitmap)
.into(itemView.img)
}
override fun onVideoLoadFinish(uri: Uri) {
itemView.video.setVideoURI(uri)
itemView.video.start()
}
val videoLoader = VideoLoader(this)
val imageLoader = ImageLoader(this)
}
class VideoLoader(private val listener: OnMediaLoaderListener): AsyncTask<InputStream, Void, File>() {
// some stuff here...
}
class ImageLoader(private val listener: OnMediaLoaderListener): AsyncTask<InputStream, Void, Bitmap>() {
// some stuff here...
}
}
interface OnMediaLoaderListener {
fun onVideoLoadFinish(uri: Uri)
fun onImageLoadFinish(bitmap: Bitmap)
}
Не знаю, почему появляется эта ошибка.Любая идея о том, как правильно вызвать AsyncTask
внутри Adapter
и предотвратить эту ошибку?
Спасибо.