微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么带有空格的url给我MalformedURLException?

如何解决为什么带有空格的url给我MalformedURLException?

我使用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();
    }

返回值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;
    }

重要更新:我输入了另一个词(此词:价格),应用运行良好,出现了一些词问题

预先感谢

解决方法

据我了解查询字符串的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():

/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。