2013-12-09 18 views
8

Un cliente ha segnalato un errore di strano. Quando si effettua una normale AndroidHttpClient.execute() in un AsyncTask, l'applicazione si blocca e si ottiene il seguente stack traceAndroidHttpClient NullPointerException chiamando 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 

Perché è chiamando checkMMSSendPermission e isSmsRequest? Non stiamo utilizzando MMS e SMS e l'applicazione non ha quei permessi, il che credo sia il motivo per cui si blocca. Questo funziona per tutti gli altri 99,9% dei nostri utenti.

codice simile a questo

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

Qualsiasi aiuto sarebbe gradito

Aggiornamento

Questo sembra essere solo che colpisce i telefoni Z1 e ZR Sony Xperia Z,. Apparentemente i problemi iniziarono a verificarsi dopo aver ricevuto l'aggiornamento ad Android 4.3. Nessuno con quei telefoni può usare la nostra app ma, per tutto il resto, funziona.

+2

uso 'HttpClient client = new DefaultHttpClient();' – Raghunandan

+0

ringraziare il vostro per il tuo commento. Risolve il problema con MMS? Hai visto questo problema prima? – KlasE

+0

Ho incontrato lo stesso problema su un Sony XL39h. E funziona dopo la modifica a 'DefaultHttpClient'. Hai trovato una soluzione per questo problema senza cambiare 'HttpClient'? –

risposta

2

Non certo perché si sta facendo chiamate a MMS e SMS metodi, ma provare a fare questo:

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

Questo dovrebbe funzionare senza alcun crash.

+0

Grazie per aver risposto. Lo verificherò. Tuttavia, ho avuto problemi con DefaultHttpClient in precedenza con versioni precedenti di Android. Sfortunatamente, non ricordo esattamente quali fossero questi problemi. Quello che so è che HttpUrlConnection normale funziona per tutte le versioni di Android 4.x. Sfortunatamente, ci sono problemi con i dispositivi 2.x quando si tratta di fare il POST con SSL e un corpo vuoto. AndroidHttpClient era l'unico con cui ho lavorato usando lo stesso codice per tutte le versioni di Android. E ora anche questa opzione è andata, e sembra che ci sia solo un problema con Xperia, come mai? – KlasE

+0

Forse dovrei riformulare la domanda sopra. Quello che voglio davvero sapere è il motivo per cui controlla l'autorizzazione MMS quando usa AndroidHttpClient e perché non riesce con una NullPointerException? – KlasE

+1

Suppongo che si tratti di un bug del firmware – Raiv