繁体   English   中英

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

[英]java.lang.IllegalArgumentException: Illegal character in scheme at index 0:

尝试运行以下代码时出现错误。

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

请帮我解决问题!!!

先感谢您

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

我尝试使用您的代码..这就是我所做的..

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;
    }



}

并在logcat中打印所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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