简体   繁体   中英

Java IllegalArgumentException Illegal character in query at index

I'm using the code below, which works fine when I use http://stackoverflow.com/ . When I change it to http://www.sitetest.com/query.php?request=how are you My app throws an exception. It says:

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

What is the Illegal Character in there? I can't spot it.

  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 

Seems you have some whitespace character there which is not the regular
space character (decimal 32). Also, it seems it is not URL encoded.

You should have inside the execute sth like:

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

So, complete code on that line:

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

My source:

PHP URL Encoding / Decoding

Side note:

I don't have a php environment installed on my machine right now, the verifying of that function needs to be made by you. That's what I found.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM