2013-12-09 12 views
8

Ein Kunde hat einen seltsamen Fehler gemeldet. Wenn dabei ein normales AndroidHttpClient.execute() in einer AsyncTask, die App-Abstürze und er bekommt den folgenden Stack-TraceAndroidHttpClient Nullpointerexception aufrufend android.net.http.AndroidHttpClient.isMmsRequest

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 

Warum ist es checkMMSSendPermission und isSmsRequest nennen? Wir verwenden überhaupt keine MMS und SMS, und die Anwendung verfügt nicht über diese Berechtigungen, was vermutlich den Absturz verursacht. Dies funktioniert für alle anderen 99,9% unserer Benutzer.

Code wie folgt aussieht

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(); 
... 

Jede Hilfe

aktualisieren

Dies scheint willkommen wäre nur Auswirkungen auf Sony Xperia Z, Z1 und ZR-Telefone zu werden. Offenbar traten die Probleme nach Erhalt des Updates für Android 4.3 auf. Niemand mit diesen Handys kann unsere App verwenden, aber für alle anderen funktioniert es.

+2

Verwenden Sie 'HttpClient client = new DefaultHttpClient();' – Raghunandan

+0

Vielen Dank für Ihren Kommentar. Löst das das Problem mit MMS? Hast du dieses Problem schon einmal gesehen? – KlasE

+0

Ich habe das gleiche Problem auf einem Sony XL39h gerannt. Und es funktioniert nach dem Wechsel zu 'DefaultHttpClient'. Haben Sie eine Lösung für dieses Problem gefunden, ohne den 'HttpClient' zu ändern? –

Antwort

2

nicht sicher, warum es Anrufe MMS und SMS Methoden machen, sondern versuchen, dies zu tun:

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

Dies ohne Abstürze funktionieren sollte.

+0

Vielen Dank für Ihre Antwort. Ich werde das überprüfen. Allerdings habe ich Probleme mit DefaultHttpClient mit älteren Android-Versionen. Leider erinnere ich mich nicht genau, was diese Probleme waren. Was ich weiß ist, dass normale HttpUrlConnection für alle Android 4.x-Versionen funktioniert. Leider gibt es Probleme mit 2.x-Geräten, wenn es darum geht, POST zusammen mit SSL und einem leeren Körper zu machen. AndroidHttpClient war der einzige, den ich mit dem gleichen Code für alle Android-Versionen arbeiten. Und jetzt ist diese Option auch weg und es scheint nur ein Problem mit Xperia zu sein, wieso? – KlasE

+0

Vielleicht sollte ich die obige Frage umformulieren. Was ich wirklich wissen möchte ist, warum es MMS-Berechtigung überprüft, wenn AndroidHttpClient verwendet und warum es mit einer NullPointerException fehlschlägt? – KlasE

+1

Ich nehme an, das ist ein Firmware-Bug – Raiv