1
  override fun setR2SettingData(cmd: String, status: String) {
        val requestbuilder = NetworkRequest.Builder()
        requestbuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
        connectivityManager.requestNetwork(
            requestbuilder.build(),
            object : ConnectivityManager.NetworkCallback() {
                override fun onAvailable(network: Network) {
                    val builder1 = OkHttpClient.Builder()
                    builder1.socketFactory(network.socketFactory)
                    val apiService =
                        RetrofitInstance.getApiServiceXMLForR2(
                            Constants.BASE_URL_CAMERA_R2,
                            builder1
                        )
                    trackDisposable(
                        apiService.requestCameraR2URLForSettingResponse(cmd, status)
                            .subscribeOn(schedulerProvider.io())
                            .observeOn(schedulerProvider.ui())
                            .subscribe()
                    )
                }
            })

    }

This code i am using network call when we call API some time I am recieving the following error: android.net.ConnectivityManager$TooManyRequestsException

   Process: com.rovedashcam.android, PID: 25285
    android.net.ConnectivityManager$TooManyRequestsException
        at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:3378)
        at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3564)
        at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3585)
        at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3661)
        at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:3622)
        at 
   connectivityManager.requestNetwork

can anyone tell me why I am getting this error?

MwBakker
  • 498
  • 5
  • 18
MARSH
  • 117
  • 1
  • 7
  • 22
  • Where do you call this `setR2SettingData()` function? – Zain Jan 23 '23 at 19:51
  • @Zain Thanks for quick answer i am calling from view Model – MARSH Jan 23 '23 at 20:13
  • Can you debug and log if it's called multiple times; you'd add a log message and see – Zain Jan 23 '23 at 20:23
  • @Zain i have already debug it its calling but its synchronously multiple times so is there any way to fix it ? – MARSH Jan 24 '23 at 05:51
  • Just make sure that it's not triggered in lifecycle methods that got called multiple times such as onResume/onStart. – Zain Jan 24 '23 at 14:34
  • I am sure its not getting call multiple time we are using mutableLive data to update view of API Response . I don't know why this happening while all Api is running in background . – MARSH Jan 24 '23 at 15:24
  • @MARSH found any solution on this? – amodkanthe Jun 21 '23 at 15:39

1 Answers1

1

I have tried resolving this by integration connectivityManager with fragment lifecycle methods

Here is my implementation.

  1. Create Class properties

    private var connectivityManager:ConnectivityManager? = null
    private val connectionCallback = object : ConnectivityManager.NetworkCallback() {
         override fun onAvailable(network: Network) {//perform your stuff}
         override fun onLost(network: Network) {//perform your stuff}
    }
    
  2. Initialise and register ConnectivityManager in onCreateView()

    connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    connectivityManager?.registerDefaultNetworkCallback(connectionCallback)
    
  3. unregisterNetworkCallback in onPause()/onStop()/onDestroy() based on your requirement

     connectivityManager?.unregisterNetworkCallback(connectionCallback)
    
Gopal
  • 1,734
  • 1
  • 14
  • 34