Я использую следующий код, который отлично работает, когда я использую 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
Пожалуйста, разместите полную трассировку стека. –
Сначала нужно сначала закодировать свой URL. Проверьте аналогичный вопрос здесь: http://stackoverflow.com/questions/724043/http-url-address-encoding-in-java – MillaresRoo
Я не знаю, что делает то, что происходит, но главной причиной ошибки является то, что у него есть пробел перед первым% 20. Все пробелы должны быть закодированы до% 20, и результат должен быть свободен от пробелов. Посмотрите: http://stackoverflow.com/questions/497908/are-urls-allowed-to-have-a-space-in-them для справки. – mico