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。请查看