好的,所以我正在编写一个Android应用程序,并试图下载位图并将其设置为ImageView。以下是相关部分的代码:

    private class GetContactInfo extends AsyncTask<String, Void, ContactInfo[]> {

    @Override
    protected ContactInfo[] doInBackground(String... url) {
        // Instantiate what is needed
        URL json = null;

        //Set the JSON URL
        try {
            json = new URL(url[0]);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

        // Use Jackson library to read out the data from the contacts page
        try {
            contacts = mapper.readValue(json, ContactInfo[].class);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Add everything into the bitmap ArrayList
        for (int i = 0; i < contacts.length; i++) {
            String imageURL = contacts[i].getSmallImageURL();

            // Download the Bitmap and add it to the ArrayList
            try {
                bitmap.add(downloadBitmap(imageURL));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // Return statement
        return contacts;
    }




public Bitmap downloadBitmap(String imageURL) throws IOException {

    URL url = new URL(imageURL);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream stream = connection.getInputStream();
    Bitmap bitmap = BitmapFactory.decodeStream(stream);
    if (bitmap == null) {
        Log.e("Null", "Bitmap null");
    }

    return bitmap;
}


日志从不捕获位图为null,或者至少不显示位图(我在堆栈跟踪中看到还有4个错误,但它们从未显示出来,并且我不确定如何扩展它以显示其他错误。)

NullPointerException位于bitmap.add(downloadBitmap(imageURL));行。因此,我的downloadBitmap函数以某种方式返回空结果。有任何想法吗?

编辑:我不确定这是否重要,但是URL中的图像是.jpeg文件。

编辑2:将其放在注释中,以便我也将其编辑到我的帖子中,将位图声明为全局变量,如ArrayList<Bitmap> bitmap;这样,以便以后可以在onPostExecute方法中使用它。

最佳答案

正如你所说的,错误在行

bitmap.add(downloadBitmap(imageURL));


这意味着罪魁祸首是您的位图变量,而不是downloadBitmap(imageURL)方法。

另外,在编辑中,您提到已将位图声明为全局变量-ArrayList位图;

为了访问(向其添加位图)此全局声明的变量,您必须对其进行初始化。

在您的onCreate中-

bitmap = new ArrayList<Bitmap>();


NPE必须走了。

09-10 12:52