在安卓中实例化HttpClient时出现IllegalArgumentException异常

8
在Google Play控制台中,我可以看到用户提交的崩溃报告,他们抱怨说我的应用程序在启动后立即崩溃。问题似乎是在实例化HttpClient时抛出的异常。我做错了什么?
以下是堆栈跟踪的摘录:
java.lang.IllegalArgumentException: androidApplicationContext must be not null! at org.apache.http.impl.client.naf.gba.connector.GbaServiceConnectorSynchronizedSingleton.instance(GbaServiceConnectorSynchronizedSingleton.java:76) at org.apache.http.impl.client.naf.gba.shared.KeeperManager.init(KeeperManager.java:68) at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.initSharedResources(NafHttpAuthStrategyDefault.java:119) at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.(NafHttpAuthStrategyDefault.java:95) at org.apache.http.impl.client.AbstractHttpClient.(AbstractHttpClient.java:168) at org.apache.http.impl.client.DefaultHttpClient.(DefaultHttpClient.java:113)
1个回答

9

解决方案

  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 must be not null!

在我的具体情况下,由于分析库,在GbaServiceConnectorSynchronizedSingleton.java的第76行抛出了该异常。

如何重现

以下链接是一个测试用例,可用于重现此问题: https://gist.github.com/Bastoche/6133227


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接