2013-12-22 3 views
0

Я использую следующий код, который отлично работает, когда я использую http://stackoverflow.com/. Когда я меняю его на http://www.sitetest.com/query.php?request=how are you Мое приложение выдает исключение. В нем говорится:Java IllegalArgumentException Недопустимый символ в запросе по индексу

Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 46: http://www.sitetest.com/query.php?request=how %20are%20you? 

Что такое Незаконный характер? Я не могу это понять.

AsyncTask<String, String, String> result = new RequestTask().execute("http://www.sitetest.com/query.php?request=how are you"); 
     try { 
      this.textToSpeech(result.get().trim()); 
     } catch (InterruptedException e) { 
      //e.printStackTrace(); 
      Toast.makeText(this, "Interrupted", 
        Toast.LENGTH_LONG).show(); 
     } catch (ExecutionException e) { 
      Toast.makeText(this, e.getMessage(), 
        Toast.LENGTH_LONG).show(); 
      //e.printStackTrace(); 
     } 
12-22 19:17:32.547: E/AndroidRuntime(20764): FATAL EXCEPTION: AsyncTask #1 
12-22 19:17:32.547: E/AndroidRuntime(20764): java.lang.RuntimeException: An error occured while executing doInBackground() 
12-22 19:17:32.547: E/AndroidRuntime(20764): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.lang.Thread.run(Thread.java:856) 
12-22 19:17:32.547: E/AndroidRuntime(20764): Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 46: http://www.sitetest.com/query.php?request=how %20are%20you? 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.net.URI.create(URI.java:727) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at com.sitetest.chat.MainActivity$RequestTask.doInBackground(MainActivity.java:170) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at com.sitetest.chat.MainActivity$RequestTask.doInBackground(MainActivity.java:1) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
12-22 19:17:32.547: E/AndroidRuntime(20764): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
12-22 19:17:32.547: E/AndroidRuntime(20764): ... 4 more 
+0

Пожалуйста, разместите полную трассировку стека. –

+1

Сначала нужно сначала закодировать свой URL. Проверьте аналогичный вопрос здесь: http://stackoverflow.com/questions/724043/http-url-address-encoding-in-java – MillaresRoo

+0

Я не знаю, что делает то, что происходит, но главной причиной ошибки является то, что у него есть пробел перед первым% 20. Все пробелы должны быть закодированы до% 20, и результат должен быть свободен от пробелов. Посмотрите: http://stackoverflow.com/questions/497908/are-urls-allowed-to-have-a-space-in-them для справки. – mico

ответ

1

Кажется, у вас есть какой-то символ пробела там, который не является регулярным
символ пробела (десятичное 32). Кроме того, похоже, что он не кодируется URL.

0

Вы должны иметь внутри execute СТГ, как:

urlencode('http://www.sitetest.com/query.php?request=how are you') 

Таким образом, полный код на этой линии:

AsyncTask<String, String, String> result = new RequestTask().execute(urlencode('http://www.sitetest.com/query.php?request=how are you')); 

Мой источник:

PHP URL Encoding/Decoding

Примечание стороны:

Я не имею PHP среды, установленной на моей машине прямо сейчас, верификация этой функции должно быть сделано вами. Вот что я нашел.

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