У меня есть новый фрагмент с ViewModel, созданный в Android Studio 3.2.1.
Цель состоит в том, чтобы сделать запрос с использованием Volley Singleton, предложенного Google здесь .
Проблема заключается в том, что шаблон Google Singleton для Volley Singleton зависит от контекстакоторого нет непосредственно в ViewModel.
Как получить контекст приложения из ViewModel, который затем будет использоваться синглтоном Volley?
WebsiteRestApi Singleton с Volley
package com.developer.pochttp.sampledata
import android.content.Context
import android.graphics.Bitmap
import android.support.v4.util.LruCache
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.toolbox.ImageLoader
import com.android.volley.toolbox.Volley
class WebsiteRestApi constructor(context: Context) {
companion object {
@Volatile
private var INSTANCE: WebsiteRestApi? = null
fun getInstance(context: Context) =
INSTANCE ?: synchronized(this) {
INSTANCE ?: WebsiteRestApi(context).also {
INSTANCE = it
}
}
}
val imageLoader: ImageLoader by lazy {
ImageLoader(requestQueue,
object : ImageLoader.ImageCache {
private val cache = LruCache<String, Bitmap>(20)
override fun getBitmap(url: String): Bitmap? {
return cache.get(url)
}
override fun putBitmap(url: String, bitmap: Bitmap) {
cache.put(url, bitmap)
}
})
}
val requestQueue: RequestQueue by lazy {
// applicationContext is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
Volley.newRequestQueue(context.applicationContext)
}
fun <T> addToRequestQueue(req: Request<T>) {
requestQueue.add(req)
}
}
ViewModel
package com.developer.pochttp.ui.main
import android.arch.lifecycle.ViewModel
class MainViewModel : ViewModel() {
}