**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
4个月前关门了。
改进这个问题
我使用GoogleBookAPI,当我在edittext上键入一个单词时,url链接工作得很好例如:我键入prince,应用程序不会崩溃,但当我键入prince时,它会崩溃,并给我错误的格式异常:无协议。
我已经搜索了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();
}
返回值:https://www.googleapis.com/books/v1/volumes?download=download_undefined&filter=filter_undefined&libraryrestrict=library_restrict_undefined&maxresults=20&orderby=relevance&printtype=all&q=the%20prince&key=aizasycjmeslpw147mrsnc2nzngpsbebth-rxdc (和王子之间有%20)
上面的第一个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();
}
返回值:https://www.googleapis.com/books/v1/volumes?download=download_undefined&filter=filter_undefined&libraryrestrict=library_restrict_undefined&maxresults=20&orderby=relevance&printtype=all&q=the+prince&key=aizasycjmeslpw147mrsnc2nzngpsbebth-rxdc (和王子之间有+)
我将该值传递给这个方法:(这里发生异常)
private static URL createURL(String link) {
URL url = null;
try{
url = new URL(link);
}catch (MalformedURLException mal){
mal.printStackTrace();
}
return url;
}
重要更新:我输入了另一个字(这个:价格)和应用程序运行良好,一些字的问题
提前谢谢
2条答案
按热度按时间qncylg1j1#
我理解了查询字符串的url编码,用
%20
有效,但替换为+
失败。两个人都应该好好工作。行长度241很高,但比%20高。
它编译并与我一起运行:
所以问题一定是混淆了,错误的代码。
tkqqtvp12#
感谢大家,问题出在makeurl()的stringbuilder本身,我用string替换了它,然后一切正常。编辑后生成URL():