问题描述
我使用GoogleBook API,当我在EditText上键入一个单词时,URL链接运行良好,例如: 我键入王子,应用不会崩溃,但是当我键入王子时,它崩溃了,并给了我 MalformedURLException:没有协议。>
我在Stackoverflow上进行了搜索,然后找到了2个解决方案,但没有任何解决方案。
private String makeUrl(String textFromEditText){
StringBuilder stringBuilder = new StringBuilder();
if (textFromEditText.contains(" ")){ // the method replace the space with %20
textFromEditText = textFromEditText.replace(" ","%20");
}
if (textFromEditText != null){
stringBuilder.append("https://www.googleapis.com/books/v1/volumes?download=DOWNLOAD_UNDEFINED&filter=FILTER_UNDEFINED&libraryRestrict=LIBRARY_RESTRICT_UNDEFINED&maxResults=20&orderBy=relevance&printType=ALL&q=");
stringBuilder.append(textFromEditText);
stringBuilder.append("&key=AIzaSyCJmeSLPw147mRSnc2nZNgPSbebtH-RxDc");
}
Log.v("makeURL",stringBuilder.toString());
return stringBuilder.toString();
}
上面的第一个If语句(检查字符串是否包含空格)不能解决我的问题,我得到了相同的异常。
- 第二个解决方案:
private String makeUrl(String textFromEditText) {
StringBuilder stringBuilder = new StringBuilder();
if (textFromEditText != null){
stringBuilder.append("https://www.googleapis.com/books/v1/volumes?download=DOWNLOAD_UNDEFINED&filter=FILTER_UNDEFINED&libraryRestrict=LIBRARY_RESTRICT_UNDEFINED&maxResults=20&orderBy=relevance&printType=ALL&q=");
try{
stringBuilder.append(URLEncoder.encode(textFromEditText,"UTF-8"));
Here i used URL encoder
}catch (UnsupportedEncodingException io){}
stringBuilder.append("&key=AIzaSyCJmeSLPw147mRSnc2nZNgPSbebtH-RxDc");
}
Log.v("makeURL",stringBuilder.toString());
return stringBuilder.toString();
}
private static URL createURL(String link) {
URL url = null;
try{
url = new URL(link);
}catch (MalformedURLException mal){
mal.printstacktrace();
}
return url;
}
重要更新:我输入了另一个词(此词:价格),应用运行良好,出现了一些词问题
预先感谢
解决方法
据我了解查询字符串的URL编码,用%20
替换空格可行,但用+
替换失败。
两个人都应该使用AFAIK。线长241高,但高%20。
它已编译并与我一起运行:
try {
URL url = new URL("https://www.googleapis.com/books/v1/volumes?download=DOWNLOAD_UNDEFINED"
+ "&filter=FILTER_UNDEFINED&libraryRestrict=LIBRARY_RESTRICT_UNDEFINED"
+ "&maxResults=20&orderBy=relevance&printType=ALL&q="
+ URLEncoder.encode("the prince","UTF-8")
+ "&key=AIzaSyCJmeSLPw147mRSnc2nZNgPSbebtH-RxDc");
System.out.println(url);
} catch (MalformedURLException | UnsupportedEncodingException e) {
e.printStackTrace();
}
因此,问题一定是混淆的错误代码。
,谢谢大家,问题出在StringURL本身的makeURL()上,我用String替换了它,然后一切正常,没有任何异常。 编辑后的makeURL():
/