Android java.IOException:索引0处主机名中的非法字符

Android java.IOException:索引0处主机名中的非法字符,java,android,Java,Android,我想知道是否有人能在这方面帮助我。这是关于android开发的 我用这个图片链接为例。 我使用inputstream来获取图像内容 InputStream is = (InputStream) new URL("http://soompi_images.s3.amazonaws.com/4b1d3d685350b3ee612d098fda7e7441_large.jpg") .openStream(); 这是为了从我的绘图设备的图像链接中获取图像 但是,我在索引0的主机名处获

我想知道是否有人能在这方面帮助我。这是关于android开发的

我用这个图片链接为例。

我使用inputstream来获取图像内容

InputStream is = 
   (InputStream) new URL("http://soompi_images.s3.amazonaws.com/4b1d3d685350b3ee612d098fda7e7441_large.jpg")
    .openStream();
这是为了从我的绘图设备的图像链接中获取图像

但是,我在索引0的主机名处获取非法字符

我尝试过htmlEncode,但它不起作用。所以我希望有人能帮助我

谢谢。

我就是这么做的:

private Bitmap LoadImage(String URL, BitmapFactory.Options options) //
{
    Bitmap bitmap = null;
    InputStream in = null;
    try //
    {
        in = OpenHttpConnection(URL);
        bitmap = BitmapFactory.decodeStream(in, null, options);
        in.close();
    } //
    catch (Exception ex) //
    {
        Logger.LogError("LoadImage", ex);
        return null;
    }
    return bitmap;
}

private InputStream OpenHttpConnection(String strURL) throws IOException //
{
    InputStream inputStream = null;
    URL url = new URL(strURL);
    URLConnection conn = url.openConnection();

    try //
    {
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        httpConn.setRequestMethod("GET");
        httpConn.connect();

        if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            inputStream = httpConn.getInputStream();
        }
    } //
    catch (Exception ex) //
    {
        return null;
    }
    return inputStream;
}
希望这有帮助

Java URL类无法解析带有下划线的主机名,例如*soompi\u图像*
Pheonixblade9是一个非常好的解决方案。

真正的答案是不要在URL中使用无效的主机名。您不能指望任何无效的主机名能够可靠地工作

String url = "http://soompi_images.s3.amazonaws.com/4b1d3d685350b3ee612d098fda7e7441_large.jpg";

url = url.replace("soompi_images.s3.amazonaws.com", "s3.amazonaws.com/soompi_images");

InputStream is = (InputStream) new URL(url).openStream();
Internet标准要求对协议进行注释,要求组件主机名标签只能包含ASCII字母“a”到“z”,不区分大小写,数字“0”到“9”,以及连字符“-”。RFC 952中主机名的原始规范规定,标签不能以数字或连字符开头,也不能以连字符结尾。然而,随后的规范RFC1123允许主机名标签以数字开头。不允许使用其他符号、标点符号或空白。
我应该如何解决这个问题?我试着把uu码改成ASCII码,但它也不起作用。下面的代码,由Pheonixblade9发布,对我有用。删除您尝试获取图像的代码,并用下面的代码替换它。该代码的工作方式不会因为try-and-catch而显示错误。但是,图像仍然没有显示。我正在寻找一种方法,我可以得到的形象。无论如何谢谢你!尝试单步执行代码。这是作为一名开发人员的一部分,调试代码,让他们尝试在您的情况下工作。我无法从中获得图像。无论如何谢谢你!到底是什么不起作用?这对我很有用。你需要确保你是在后台运行的,否则它会冻结你的应用程序。是的,它是在后台运行的。我的意思是,我仍然不能得到它的图像,因为我认为是因为下划线。但是,我无法更改url,因为它不是由我创建的。这会引发什么异常?在我的应用程序中,它可以很好地处理下划线。引发的异常是java.lang.NullPointerException。