我正在尝试下载两个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();
}