#android #kotlin #broadcastreceiver #android-workmanager
#Android #котлин #broadcastreceiver #android-workmanager
Вопрос:
Это мой код :
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.home_activity)
loadProductForTheFirst()
@RequiresApi(Build.VERSION_CODES.M)
private fun hasNetworkAvilable(context: Context): Boolean {
val service = Context.CONNECTIVITY_SERVICE
val manager = context.getSystemService(service) as ConnectivityManager
val network = manager.activeNetwork
return (network != null)
}
@RequiresApi(Build.VERSION_CODES.M)
fun loadProductForTheFirst(){
swipeRefreshMain.isRefreshing = true
viewModel.getalldata().observe(this, Observer {
if (!it.isNullOrEmpty()) {
recycler_main.apply {
layoutManager = GridLayoutManager(this@HomeActivity, 2)
adapter = RecyclerAdapterMain(it, this@HomeActivity)
swipeRefreshMain.isRefreshing = false
}
} else {
if (hasNetworkAvilable(this)) {
viewModel.products.observe(this, Observer {
recycler_main.apply {
layoutManager = GridLayoutManager(this@HomeActivity, 2)
adapter = RecyclerAdapterMain(it, this@HomeActivity)
swipeRefreshMain.isRefreshing = false
}
})
viewModel.setup()
} else {
/// in here if the user not internet for loading the products
/// the alert dialog displays .
AlertDialog.Builder(this)
.setTitle("Internet State")
.setMessage("please turn on your internet connection")
.create()
.show()
/// in here I want a method ( workmanager )
// that as soon as the internet be accessible
/// my product will be updated .
}
}
})
}
ну, в первый раз, когда пользователь открывает мое приложение, ему нужен Интернет для загрузки продукта из api.
Поэтому я просто хочу, чтобы метод, подобный WorkManager, проверял, доступна ли доступность intenrnet.
И после этого мой метод будет загружен из api.
Я провел некоторый поиск, но не смог найти ни одного полезного примера работы с workmanager.
любой может помочь мне с этим. ?
Комментарии:
1. codelabs.developers.google.com/codelabs/android-workmanager
Ответ №1:
Я сделал этот код и работаю на себя.
Я помещаю его здесь, если кто-то ищет этот метод.
Я использовал work Manager для получения данных из API всякий раз, когда сеть включена.
val constraints = Constriants.builder(this)
.setRequiredNetworkType(NetworkType.Connected)
val workManager : WorkManager = WorkManager.getInstance(this)
val oneRequestWork = OneRequestWorker.build(UploadWorker::class.java)
.setconstrints(constraints)
.build
workmanager.enqueue(oneRequestWork)
рабочий класс загрузки :
class UploadWorker(context : Context , param : WorkerParameters) : Worker(context , param)
private val viewModel: ViewModelRoom by lazy {
ViewModelProvider(
ViewModelStore(),
FactoryRoom(RepositoryCart(DataBaseRoom.invoke(applicationContext)))
)
.get(ViewModelRoom::class.java)
}
override fun dowork() : Result {
return try {
viewModel.setup()
Result.success()
} catch (e: Exception) {
Result.failure()
}