How to request API using Retrofit in a Foreground Service in Android 12(Api 31)?

Viewed 57

My app has a specific requirement of uploading files as multipart using retrofit and LiveData in the background(App Navigation works while uploading data to the server.). The app requires chained network requests on the bases of the response it gets. I've used the Foreground service for network requests. this procedure works well in Android 9,10,11.

UploadFragment.kt

class UploadFragment : BaseFragment() {

    .... 
  
  private fun uploadFilesToServer() {
    val intent = Intent(requireActivity(), MyFileUploadingService::class.java)
    ContextCompat.startForegroundService(requireActivity(), intent)
  }
}

FileUploadService.kt

class FileUploadService : LifecycleService() {
    
    ....

    private fun registerObservers() {
        viewModel?.uploadLiveData!!.observe(this) { response ->
            val dataResponse: DataUploadResponse = response.responseBody!!.data!!
            if (dataResponse.error == null) {
                ....
                // Repeat
            } else {
                stopSelf()
            }
        }
    }

}

I'm getting an error while observing response using LiveData.

val dataResponse: DataUploadResponse = response.responseBody!!.data!!

Error Log

 2022-08-24 13:08:59.792 26140-26140/com.myapp.demo E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.myapp.demo, PID: 26140
        java.lang.NullPointerException
            at com.myapp.demo.service.FileUploadService$registerObservers$1.onChanged(FileUploadService.kt:242)
            at com.myapp.demo.service.FileUploadService$registerObservers$1.onChanged(FileUploadService.kt:54)
            at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
            at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
            at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
            at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
            at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loopOnce(Looper.java:201)
            at android.os.Looper.loop(Looper.java:288)
            at android.app.ActivityThread.main(ActivityThread.java:7870)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
0 Answers
Related