首页 > 解决方案 > Volley 给出运行时异常和没有协议的错误 url

问题描述

当我ImageRequest使用 volley 运行时,它会给出运行时异常并且没有协议错误。下面是我使用的代码和网址。

ImageRequest ir = new ImageRequest(URL, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {

                musicMetadata.trackArt.add(response);
                if (musicMetadata.trackArt.size() == 10) {
                    extract.setNotify(true);
                }

            }
        }, 0, 0, ImageView.ScaleType.CENTER_CROP, null, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

网址:

https://lastfm-img2.akamaized.net/i/u/64s/4cc18b154dc94f4acf5a1a480d73ab29.png

错误:

08-21 12:40:58.231 6364-6382/com.example.kapiljack.interesting E/Volley: [274] NetworkDispatcher.processRequest: Unhandled exception java.lang.RuntimeException: Bad URL 
java.lang.RuntimeException: Bad URL 
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:175)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)
 Caused by: java.net.MalformedURLException: no protocol: 
    at java.net.URL.<init>(URL.java:589)
    at java.net.URL.<init>(URL.java:486)
    at java.net.URL.<init>(URL.java:435)
    at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:87)
    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131) 
    at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111) 
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90) 
    08-21 12:41:06.807 6364-6384/com.example.kapiljack.interesting D/Volley: [276] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://lastfm-img2.akamaized.net/i/u/64s/4cc18b154dc94f4acf5a1a480d73ab29.png 0xe7f9399b LOW 3> [lifetime=9166], [size=9667], [rc=200], [retryCount=1]
    08-21 12:41:06.811 6364-6385/com.example.kapiljack.interesting D/Volley: [277] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://lastfm-img2.akamaized.net/i/u/64s/9758f93dd7104585c537e53cfaa084a4.png 0xe7f9399b LOW 4> [lifetime=9168], [size=8999], [rc=200], [retryCount=1]
    08-21 12:41:06.815 6364-6382/com.example.kapiljack.interesting D/Volley: [274] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://lastfm-img2.akamaized.net/i/u/64s/4ad5eaab149f4c42af957658b5294998.png 0xe7f9399b LOW 7> [lifetime=8573], [size=9313], [rc=200], [retryCount=1]
    08-21 12:41:07.389 6364-6383/com.example.kapiljack.interesting D/Volley: [275] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] https://lastfm-img2.akamaized.net/i/u/64s/cba44589a043424ab11579be7af8bf39.png 0xe7f9399b LOW 2> [lifetime=9749], [size=9363], [rc=200], [retryCount=1]

PS:我在浏览器中检查了网址,它工作正常。

标签: androidandroid-volley

解决方案


问题在于您提供给的 URL ImageRequest。如果网址是这样的:

   "https://lastfm-img2.akamaized.net/i/u/64s/4cc18b154dc94f4acf5a1a480d73ab29.png"
   ^                                                                              ^

然后它不会找到任何像 http 或 https 这样的协议,因此会抱怨 url 格式错误。确保您在 URL 字符串的开头和结尾传递了一个没有双引号的有效 URL。


推荐阅读