Android - 如何下载多张图片?

时间:2014-03-04 18:27:44

标签: android facebook

我正在尝试下载两个facebook个人资料图片并将它们分配到一个线程中的正确ImageViews,所以我编写了方法getProfilePicture(),您可以在下面看到。我的问题是,此代码有时可以正常工作,但在大多数情况下,它会在java.lang.NullPointerException的行中提供userPicture[viewNumber].setImageBitmap(bitmap[viewNumber]);

当我在大多数情况下只下载一张图片时效果很好,但有时从BitmapFactory.decodeStream返回的位图为空。

你能帮我解决这段代码有什么问题,或者向我展示如何下载多个facebook个人资料图片并将它们分配给Android 2.2(API级别8)及更高级别的ImageViews的完整代码?谢谢你的帮助。

private ImageView[] userPicture = new ImageView[2];
private Bitmap[] bitmap = new Bitmap[2];
private String[] userID = new String[2];
private URL img_value[] = new URL[2];
int viewNumber;

protected void onCreate(Bundle savedInstanceState) {
    ...
    userPicture[0] = (ImageView) findViewById(R.id.userpicture0);
    userPicture[1] = (ImageView) findViewById(R.id.userpicture1);

    userID[0] = "1454178610";
    userID[1] = "1396953818";

    getProfilePicture();
    ...
}

public void getProfilePicture() {

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                for (viewNumber = 0; viewNumber < 2; viewNumber++) {
                    Log.d("thread", "Starting bitmap download");

                    img_value[viewNumber] = new URL("http://graph.facebook.com/" + userID[viewNumber] + "/picture?type=large&height=200&width=200");
                    bitmap[viewNumber] = BitmapFactory.decodeStream(img_value[viewNumber].openConnection().getInputStream());

                    userPicture[viewNumber].post(new Runnable() {
                        public void run() {
                            userPicture[viewNumber].setImageBitmap(bitmap[viewNumber]);
                            if (bitmap[viewNumber] == null)
                                Log.d("thread", "bitmap = null");
                        }
                    });
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();

}

0 个答案:

没有答案