getInputstream上的NullPointerException

时间:2015-01-30 23:45:45

标签: java android nullpointerexception inputstream urlconnection

你知道为什么我在调用getInputStream()函数时会捕获NullPointerException吗?

我做了一个URLConnection的日志,链接是正确的...我无法弄清楚问题是什么。

public Bitmap getBitmap(String resolution) {
    URL url = null;
    Bitmap bmp = null;

    switch(resolution) {
        case "thumb":
            url = thumbUrl;
            break;

        case "low":
            url = lowresUrl;
            break;

        case "standard":
            url = standardresUrl;
            break;
    }

    try {

        URLConnection conn = url.openConnection();

        InputStream in = conn.getInputStream();

        bmp = BitmapFactory.decodeStream(in);

        in.close();

    }
    catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }

    return bmp;
}

3 个答案:

答案 0 :(得分:2)

根据您发布的代码,唯一合理的结论是connnull。你可以使用conditional operator ? :(三元)之类的

来检查
// InputStream in = conn.getInputStream();
InputStream in = (conn != null) ? conn.getInputStream() : null;

或类似

InputStream in = null;
if (conn != null) { 
    in = conn.getInputStream();
}

我还注意到您的switch没有default:,因此url null也可能Exception(但您会得到openConnection()如果是这种情况,请{{1}}。

答案 1 :(得分:1)

感谢您的所有答案。 问题出在这一行的catch块中:

Log.e("Error", e.getMessage());

getMessage()函数返回null。

答案 2 :(得分:0)

在try-catch之前声明并初始化变量。 在java编程中,不要尝试在try catch中声明变量。在try catch之前执行它。

    URLConnection conn=null;
    InputStream in=null;
    try {

    conn = url.openConnection();

    in = conn.getInputStream();

    bmp = BitmapFactory.decodeStream(in);

    in.close();

}