【问题标题】:IllegalArgumentException when instantiating HttpClient in Android在 Android 中实例化 HttpClient 时出现 IllegalArgumentException
【发布时间】:2013-08-01 17:27:21
【问题描述】:

在 google play 控制台中,我可以看到来自抱怨的用户的崩溃报告,因为我的应用程序在启动后就崩溃了。原因似乎是实例化 HttpClient 时抛出的异常。我做错了什么?

这是堆栈跟踪的摘录:

java.lang.IllegalArgumentException: androidApplicationContext 不能为空! 在 org.apache.http.impl.client.naf.gba.connector.GbaServiceConnectorSynchronizedSingleton.instance(GbaServiceConnectorSynchronizedSingleton.java:76) 在 org.apache.http.impl.client.naf.gba.shared.KeeperManager.init(KeeperManager.java:68) 在 org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.initSharedResources(NafHttpAuthStrategyDefault.java:119) 在 org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.(NafHttpAuthStrategyDefault.java:95) 在 org.apache.http.impl.client.AbstractHttpClient.(AbstractHttpClient.java:168) 在 org.apache.http.impl.client.DefaultHttpClient.(DefaultHttpClient.java:113)

【问题讨论】:

    标签: android apache-httpclient-4.x illegalargumentexception


    【解决方案1】:

    解决方案

    1. 使用 HttpURLConnection 而不是 HttpClient。根据Android开发者的博客,最好的选择是:http://android-developers.blogspot.fr/2011/09/androids-http-clients.html
    2. 尽快在应用程序的主线程中创建一个 HttpClient 实例,例如在其 onCreate 方法中。

    原因

    一些 android 设备,例如 T-Mobile MyTouch Q,使用 Apache HttpClient 库的自定义实现。在此类设备上,不在主线程中创建应用程序的第一个 HttpClient 将导致抛出异常:

    java.lang.IllegalArgumentException: androidApplicationContext 不能为空!

    在我的具体情况下,由于一个分析库,它被扔进了 GbaServiceConnectorSynchronizedSingleton.java 的第 76 行。

    如何重现

    这是一个允许重现问题的测试用例的链接: https://gist.github.com/Bastoche/6133227

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多