Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IllegalArgumentException索引处查询中的非法字符_Java_Php - Fatal编程技术网

Java IllegalArgumentException索引处查询中的非法字符

Java IllegalArgumentException索引处查询中的非法字符,java,php,Java,Php,我正在使用下面的代码,当我使用http://stackoverflow.com/。当我将其更改为http://www.sitetest.com/query.php?request=how 你是否我的应用程序引发异常。它说: Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 46: http://www.sitetest.com/query.php?request=how %20ar

我正在使用下面的代码,当我使用
http://stackoverflow.com/
。当我将其更改为
http://www.sitetest.com/query.php?request=how 你是否
我的应用程序引发异常。它说:

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();
        }
AsyncTask result=new RequestTask()。执行(“http://www.sitetest.com/query.php?request=how 是你吗;
试试{
this.textToSpeech(result.get().trim());
}捕获(中断异常e){
//e、 printStackTrace();
Toast.makeText(这是“中断的”,
Toast.LENGTH_LONG).show();
}捕获(执行例外){
Toast.makeText(这个,例如getMessage(),
Toast.LENGTH_LONG).show();
//e、 printStackTrace();
}
12-22 19:17:32.547:E/AndroidRuntime(20764):致命异常:AsyncTask#1
12-22 19:17:32.547:E/AndroidRuntime(20764):java.lang.RuntimeException:执行doInBackground()时出错
12-22 19:17:32.547:E/AndroidRuntime(20764):在android.os.AsyncTask$3.done(AsyncTask.java:299)
12-22 19:17:32.547:E/AndroidRuntime(20764):在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
12-22 19:17:32.547:E/AndroidRuntime(20764):位于java.util.concurrent.FutureTask.setException(FutureTask.java:219)
12-22 19:17:32.547:E/AndroidRuntime(20764):在java.util.concurrent.FutureTask.run(FutureTask.java:239)
12-22 19:17:32.547:E/AndroidRuntime(20764):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-22 19:17:32.547:E/AndroidRuntime(20764):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-22 19:17:32.547:E/AndroidRuntime(20764):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-22 19:17:32.547:E/AndroidRuntime(20764):在java.lang.Thread.run(Thread.java:856)
12-22 19:17:32.547:E/AndroidRuntime(20764):由以下原因引起:java.lang.IllegalArgumentException:索引46处的查询中存在非法字符:http://www.sitetest.com/query.php?request=how %20%是你吗?
12-22 19:17:32.547:E/AndroidRuntime(20764):位于java.net.URI.create(URI.java:727)
12-22 19:17:32.547:E/AndroidRuntime(20764):位于org.apache.http.client.methods.HttpGet.(HttpGet.java:75)
12-22 19:17:32.547:E/AndroidRuntime(20764):在com.sitetest.chat.MainActivity$RequestTask.doInBackground(MainActivity.java:170)
12-22 19:17:32.547:E/AndroidRuntime(20764):位于com.sitetest.chat.MainActivity$RequestTask.doInBackground(MainActivity.java:1)
12-22 19:17:32.547:E/AndroidRuntime(20764):在android.os.AsyncTask$2.call(AsyncTask.java:287)
12-22 19:17:32.547:E/AndroidRuntime(20764):在java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-22 19:17:32.547:E/AndroidRuntime(20764):。。。4更多

似乎您有一些空白字符,而不是常规的

空格字符(十进制32)。另外,它似乎不是URL编码的。

您应该在
中执行类似以下内容:

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'));
AsyncTask result=new RequestTask().execute(urlencode('http://www.sitetest.com/query.php?request=how 你是不是)?;
我的来源:

旁注:


我现在没有在我的机器上安装php环境,需要您对该函数进行验证。这就是我发现的。

请发布完整的堆栈跟踪。您需要先对url进行编码。在这里检查一个类似的问题:我不知道发生了什么,但错误的主要原因是它在第一个%20之前有一个空格。所有空格都应编码为%20,并且结果中应没有空格。看:作为参考。我试过url编码,但没有锁。删除此?请求=如何使程序运行
AsyncTask<String, String, String> result = new RequestTask().execute(urlencode('http://www.sitetest.com/query.php?request=how are you'));