【问题标题】:AndroidHttpClient Nullpointerexception calling android.net.http.AndroidHttpClient.isMmsRequestAndroidHttpClient Nullpointerexception 调用 android.net.http.AndroidHttpClient.isMmsRequest
【发布时间】:2013-12-26 17:45:21
【问题描述】:

一位客户报告了一个奇怪的错误。 在 AsyncTask 中执行普通的 AndroidHttpClient.execute() 时,应用程序崩溃并且他得到以下堆栈跟踪

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at android.net.http.AndroidHttpClient.isMmsRequest(AndroidHttpClient.java:257)
at android.net.http.AndroidHttpClient.checkMmsSendPermission(AndroidHttpClient.java:290)
at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:296)
at com.xxx.xxx.MyClass$MyHandler.doWork(MyClass.java:325)
at  com.xxx.xxx.NetworkRequestHandler$AsyncTaskForRequestHandler.doInBackground(NetworkRequestHandler.java:532)
at com.xxx.xxx.utils.network.NetworkRequestHandler$AsyncTaskForRequestHandler.doInBackground(NetworkRequestHandler.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
... 3 more

为什么会调用 checkMMSSendPermission 和 isSmsRequest?我们根本没有使用彩信和短信,应用程序没有这些权限,我猜这就是它崩溃的原因。 这适用于我们所有其他 99.9% 的用户。

代码如下所示

AndroidHttpClient client = AndroidHttpClient.newInstance(null);
        InputStream inputStream = null;
        try
        {
            HttpPost request = new HttpPost(urlString);
            prepareURLRequest(request);
            HttpResponse response = client.execute(request);
            mResultStatus = response.getStatusLine().getStatusCode();
            inputStream = response.getEntity().getContent();
...

欢迎任何帮助

更新

这似乎只影响 Sony Xperia Z、Z1 和 ZR 手机。显然,在收到 Android 4.3 的更新后问题开始出现。 拥有这些手机的人都无法使用我们的应用程序,但除此之外,它可以正常工作。

【问题讨论】:

  • 使用HttpClient client = new DefaultHttpClient();
  • 感谢您的评论。这能解决彩信的问题吗?你以前见过这个问题吗?
  • 我在一台 Sony XL39h 上遇到了同样的问题。它在更改为DefaultHttpClient 后工作。在不更改HttpClient 的情况下,您是否找到了解决此问题的方法?
  • 是的,一种解决方法是更改​​为 DefaultHttpClient。但是,我在使用其他版本的 android 和 DefaultHttpClient 以及 SSL 和某些 POST 调用时遇到了问题。我最终所做的只是对 4.x 使用 HttpURLConnection,而对于 android
  • 它也会影响 Z Ultra。

标签: android sony androidhttpclient sony-xperia


【解决方案1】:

不确定为什么它会调用 MMS 和 SMS 方法,但请尝试这样做:

DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
    HttpResponse execute = client.execute(httpPost);
    InputStream content = execute.getEntity().getContent();

这应该没有任何崩溃。

【讨论】:

  • 感谢您的回复。我会验证的。但是,我之前在使用旧 Android 版本时遇到了 DefaultHttpClient 的问题。不幸的是,我不记得这些问题到底是什么。我所知道的是,普通的 HttpUrlConnection 适用于所有 Android 4.x 版本。不幸的是,2.x 设备在使用 SSL 和空主体进行 POST 时存在问题。 AndroidHttpClient 是唯一一个我为所有 android 版本使用相同代码的人。现在这个选项也没有了,而且似乎只是 Xperia 的问题,怎么会?
  • 也许我应该改写上面的问题。我真正想知道的是为什么它在使用 AndroidHttpClient 时会检查 MMS 权限,以及为什么它会因 NullPointerException 而失败?
  • 我想这是一个固件错误
  • 我在我们的一个应用程序中也遇到了这个问题。 @KlasE 为此切换到 DefaultHttpClient 后您是否遇到任何问题?
  • 我从未使用过 DefaultHttpClient。我通过对 Android 4+ 版本使用 HttpURLConnection 解决了这个问题,并为旧版本保留了 AndroidHttpClient。有两个实现并不漂亮,但这是安全的继续方式。我仍在等待索尼提供解决方案,而不仅仅是提供解决方法。
猜你喜欢
  • 2016-03-27
  • 2011-07-05
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多