java.lang.IllegalArgumentException:索引0处的方案中存在非法字符:

java.lang.IllegalArgumentException:索引0处的方案中存在非法字符:,java,android,Java,Android,我尝试运行以下代码时出错 protected String doInBackground(Void... params) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet("http://api.rovicorp.com/TVlisti

我尝试运行以下代码时出错

protected String doInBackground(Void... params) {

        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpGet httpGet = new HttpGet("http://api.rovicorp.com/TVlistings/v9/listings/linearschedule/360861/info?locale=en-US&duration=30&inprogress=true&apikey=4tquwdg8xfcd3seay9hyfr8b");
        String text = null;

        try {
            HttpResponse response = httpClient.execute(httpGet,localContext);


            HttpEntity entity = response.getEntity();


            text = getASCIIContentFromEntity(entity);

            Log.d(text,"In Doback");


        } catch (Exception e) {
            return e.getLocalizedMessage();
        }

        return text;

    }
我认为错误出现在HttpGet行中

日志如下

09-01 12:22:42.424  10416-10457/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.example.rest_api, PID: 10416
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:304)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.IllegalArgumentException: Illegal character in scheme at index 0:
    http://api.rovicorp.com/TVlistings/v9/listings/linearschedule/360861/info?locale=en-US&duration=30&inprogress=true&apikey=4tquwdg8xfcd3seay9hyfr8b
            at java.net.URI.create(URI.java:733)
            at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:80)
            at com.example.rest_api.MainActivity$LongRunningGetIO.doInBackground(MainActivity.java:93)
            at com.example.rest_api.MainActivity$LongRunningGetIO.doInBackground(MainActivity.java:66)
            at android.os.AsyncTask$2.call(AsyncTask.java:292)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            ... 4 more
09-01 12:22:42.424 10416-10457/?E/AndroidRuntime﹕ 致命异常:AsyncTask#1
进程:com.example.rest_api,PID:10416
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done处(AsyncTask.java:304)
位于java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
原因:java.lang.IllegalArgumentException:索引0处的方案中存在非法字符:
http://api.rovicorp.com/TVlistings/v9/listings/linearschedule/360861/info?locale=en-US&duration=30&inprogress=true&apikey=4tquwdg8xfcd3seay9hyfr8b
在java.net.URI.create(URI.java:733)
位于org.apache.http.client.methods.HttpGet.(HttpGet.java:80)
在com.example.rest_api.MainActivity$LongRunningGetIO.doInBackground(MainActivity.java:93)
在com.example.rest_api.MainActivity$LongRunningGetIO.doInBackground(MainActivity.java:66)
在android.os.AsyncTask$2.call(AsyncTask.java:292)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4更多
请帮我解决这个问题

提前谢谢你

我用你的代码试过了。。 这就是我所做的

class async extends AsyncTask<Void,Void, Void>{

    ProgressDialog pd=null;

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pd = new ProgressDialog(context);
        pd.show();

    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
    if(pd!=null)pd.dismiss();
    }


    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpGet httpGet;

            httpGet = new HttpGet("http://api.rovicorp.com/TVlistings/v9/listings/linearschedule/360861/info?locale=en-US&duration=30&inprogress=true&apikey=4tquwdg8xfcd3seay9hyfr8b");


                HttpResponse response = httpClient.execute(httpGet,localContext);

                String responseBody = EntityUtils.toString(response.getEntity(), HTTP.UTF_8);

                Log.e("In Doback",responseBody);



        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        return null;
    }



}
class async扩展了AsyncTask{
ProgressDialog pd=null;
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
pd=新进度对话框(上下文);
pd.show();
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
如果(pd!=null)pd.discouse();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpGet-HttpGet;
httpGet=新的httpGet(“http://api.rovicorp.com/TVlistings/v9/listings/linearschedule/360861/info?locale=en-US&duration=30&inprogress=true&apikey=4tquwdg8xfcd3seay9hyfr8b”);
HttpResponse response=httpClient.execute(httpGet,localContext);
String ResponseBy=EntityUtils.toString(response.getEntity(),HTTP.UTF_8);
Log.e(“在Doback中”,responseBody);
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
返回null;
}
}

它在logcat中打印了所需的结果。

URI的单参数构造函数(作为参数传递给HttpGet构造函数)不会转义非法字符。您应该使用其他构造函数。

这将转换整个URL,使其看起来像这样:http%3A%2F%2Fapi.rovicorp.com%2FTVlistings%2Fv9%2Listings%2Flinearschedule%2F360861%2Finfo%3Flocale%3Den US%26持续时间%3D30%26inprogress%3Dtrue%26apikey%3d4tQuwdg8xfcd3seay9hyfr8b我建议检查开始时是否有空格代码中的URL。请查看