【问题标题】:MalfomedURLException Protocol not found未找到 MalfomedURLException 协议
【发布时间】:2016-03-24 00:24:25
【问题描述】:

我正在尝试将图像视图设置为从 url 获取的位图,但是在我运行以下代码后会出现以下堆栈跟踪:

 public Bitmap getAlbumCover(Context context, String song, String artist) {
    this.context = context;

    song = song.replace(" ", "%20");
    artist = artist.replace(" ", "%20");

    final String finalSong = song;
    final String finalArtist = artist;

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                ObjectMapper mapper = new ObjectMapper();
                Document doc = Jsoup.connect("http://api.spotify.com/v1/search?q=track:" + finalSong + "%20artist:" + finalArtist+"%20" + "&type=track").ignoreContentType(true).get();
                String body = String.valueOf(doc.body().text());
                JsonNode readTree = mapper.readTree(body);
                albumArt = readTree.findPath("url");

                try {
                    URL url = new URL(albumArt.toString());
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setDoInput(true);
                    connection.connect();
                    InputStream input = connection.getInputStream();
                    albumImage = BitmapFactory.decodeStream(input);
                } catch (Exception e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }

            } catch (JsonGenerationException e) {
                e.printStackTrace();
            } catch (JsonMappingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();

    Log.i("icon", "i"+ albumImage);
    return albumImage;
} 

这是堆栈跟踪:

03-23 20:18:43.242 6917-6991/.xyz.php_request W/nAnnotationIntrospector: Unable to load JDK7 annotation types; will have to skip
03-23 20:18:43.943 6917-6991/.xyz.php_request E/Error: Protocol not found: "https://i.scdn.co/image/9c2c4a9ac9726bfd996ff96383178bbb5efc59ab"
03-23 20:18:43.943 6917-6991/.xyz.php_request W/System.err: java.net.MalformedURLException: Protocol not found: "https://i.scdn.co/image/9c2c4a9ac9726bfd996ff96383178bbb5efc59ab"
03-23 20:18:43.943 6917-6991/.xyz.php_request W/System.err:     at java.net.URL.<init>(URL.java:176)
03-23 20:18:43.943 6917-6991/.xyz.php_request W/System.err:     at java.net.URL.<init>(URL.java:125)
03-23 20:18:43.943 6917-6991/.xyz.php_request W/System.err:     at pillo.xyz.php_request.songlistadapter$1.run(songlistadapter.java:124)
03-23 20:18:43.943 6917-6991/.xyz.php_request W/System.err:     at java.lang.Thread.run(Thread.java:818)

链接在这里:https://i.scdn.co/image/9c2c4a9ac9726bfd996ff96383178bbb5efc59ab 如果你点击它,它会拉出一张图片。我究竟做错了什么?我已经尝试过用 UTF-8 编码 URL。

编辑:

记录专辑封面返回:我/专辑封面:“https://i.scdn.co/image/bf44daf8c3f35de83e5875bc49791c1347ef36f0

【问题讨论】:

  • 我可以告诉你图像可以读取 - 问题可能出在这行 albumImage = BitmapFactory.decodeStream(input);
  • 好的,那你觉得有什么问题呢?
  • 在很多教程中都这样显示
  • 打印albumArt.toString() 看看它显示了什么

标签: java malformedurlexception


【解决方案1】:

我做错了什么?

你在这一行调用了错误的方法albumArtURL url = new URL(albumArt.toString());。您应该调用albumArt.getTextValue() 而不是albumArt.toString()

为什么
toString() 给出了JsonNode 的字符串格式,在您的情况下是字符串"\"https://i.scdn.co/image/9c2c4a9ac9726bfd996ff96383178bbb5efc59ab\"

相反,getTextValue() 给出了字符串 "https://i.scdn.co/image/9c2c4a9ac9726bfd996ff96383178bbb5efc59ab",这正是 URL 想要的。

看到区别了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多