2013-09-06 5 views
0

Я получаю эту ошибку, что является нечетным, потому что оно работает из другого действия, вызывающего ту же задачу async. Я не могу понять, что незаконный характер в моем запросе:Force Закрыть asynctask (Незаконный символ)

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

Попробуйте кодирующий Ваш URL 'Строка URL = URLEncoder.encode («свой адрес»,«UTF-8»)' – Raghunandan

ответ

1

пытаются обрезать строку. Он удаляет нежелательные пробелы в конце строки.

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

недопустимый символ в запросе на индекс 50: http://beerportfolio.com/app_getTopTaste.php?t=Rum

Это символ с индексом 50, который сразу после " Ром". Вероятно, это какой-то символ пробела. Вам нужно будет опубликовать свой код для получения/создания этого URL-адреса, если вы хотите получить более подробную информацию, но вам, возможно, потребуется добавить какой-то код, чтобы каким-то образом удалить пробелы.

+0

Я думаю, что ты прав оп может иметь место после того, как Рома – Raghunandan

0

Попробуйте ниже

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

Я просто попытался свой адрес, и я получаю ответ

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

Как kabuko ЗАЯВИЛ символ 50 после Рома. Я думаю, что кабуко прав.

Наверное, у вас есть место в конце URL-адреса. Лучше кодировать URL-адрес, как показано ниже.

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

Смежные вопросы