2013-09-06 4 views
0

Je reçois cette erreur, ce qui est étrange car cela fonctionne à partir d'une autre activité appelant la même tâche asynchrone. Je ne peux pas comprendre ce que le caractère illégal est dans ma requête:Force Close asynctask (Caractère illégal)

09-06 17:42:29.1-32497/com.beerportfolio.beerportfoliopro E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
     java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:299) 
     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
     at java.lang.Thread.run(Thread.java:864) 
     Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 50: http://beerportfolio.com/app_getTopTaste.php?t=Rum 
     at java.net.URI.create(URI.java:727) 
     at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75) 
     at com.example.beerportfoliopro.GetTopTasteBeersJSON.readJSONFeed(GetTopTasteBeersJSON.java:139) 
     at com.example.beerportfoliopro.GetTopTasteBeersJSON.doInBackground(GetTopTasteBeersJSON.java:49) 
     at com.example.beerportfoliopro.GetTopTasteBeersJSON.doInBackground(GetTopTasteBeersJSON.java:34) 
     at android.os.AsyncTask$2.call(AsyncTask.java:287) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
     ... 5 more 
+1

Essayez l'encodage de votre URL 'url: String = URLEncoder.encode ("URL", "utf-8")' – Raghunandan

Répondre

1

essayer de rogner la chaîne. Il supprime les espaces indésirables à la fin de la chaîne.

String url = " http://beerportfolio.com/app_getTopTaste.php?t=Rum"; 
HttpGet request = new HttpGet(url.trim()); 
2

caractère illégal dans la requête à l'index 50: http://beerportfolio.com/app_getTopTaste.php?t=Rum

Il est le personnage à l'index 50, ce qui est juste après " Rhum". C'est probablement une sorte de caractère d'espace. Vous devrez poster votre code pour savoir comment vous obtenez/générez cette URL si vous voulez plus de détails, mais vous devrez peut-être ajouter du code pour supprimer les espaces quelque part.

+0

Je pense que vous avez raison op peut avoir un espace après Rum – Raghunandan

0

Essayez le dessous

HttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
    String url = " http://beerportfolio.com/app_getTopTaste.php?t=Rum"; 
    HttpGet request = new HttpGet(url); 
    HttpResponse response = httpclient.execute(request); 
    HttpEntity resEntity = response.getEntity(); 
    String _response=EntityUtils.toString(resEntity); 
    Log.i(".......",_response); 

Je viens d'essayer votre URL et je reçois la réponse

09-06 22:05:04.547: I/.......(1460): [{"beer":"Rum Cask","rate":"5","id":"dkRDyR","breweryID":"jC0TAa"}] 

Comme kabuko indiqué le caractère 50 est après rhum. Je pense que Kabuko a raison.

Je suppose que vous avez de l'espace à la fin de l'URL. Il est préférable d'encoder l'URL comme ci-dessous.

String query = URLEncoder.encode("Rum ", "utf-8"); 
    String url = "http://beerportfolio.com/app_getTopTaste.php?t=" + query; 
    HttpGet request = new HttpGet(url); 

URL encoding in Android