【问题标题】:android.net.ConnectivityManager$TooManyRequestsException in android while network call网络调用时 android.net.ConnectivityManager$TooManyRequestsException
【发布时间】:2023-02-15 13:24:32
【问题描述】:
  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()
                    )
                }
            })

    }

当我们调用 API 时我正在使用此代码我收到以下错误: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

谁能告诉我为什么会出现此错误?

【问题讨论】:

  • 你在哪里调用这个setR2SettingData()函数?
  • @Zain 感谢您快速回答我正在从视图模型中调用
  • 多次调用是否能调试记录;您将添加一条日志消息并查看
  • @Zain 我已经调试了它的调用但是它同步多次所以有什么办法可以修复它吗?
  • 只需确保它不会在多次调用的生命周期方法中触发,例如 onResume/onStart。

标签: android retrofit android-connectivitymanager


【解决方案1】:

我尝试通过集成 connectivityManagerfragment 生命周期方法来解决这个问题

这是我的实现。

  1. 创建类属性

    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. onCreateView()中初始化并注册ConnectivityManager

    connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    connectivityManager?.registerDefaultNetworkCallback(connectionCallback)
    
  3. unregisterNetworkCallbackonPause()/onStop()/onDestroy() 根据您的要求

     connectivityManager?.unregisterNetworkCallback(connectionCallback)
    

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多