Как я могу использовать work Manager в своем коде — android

#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()

        }