【发布时间】:2016-05-05 12:16:05
【问题描述】:
我正在尝试将我从 URL 加载到 ImageView 中的图像“膨胀”或“放大”。然后我想获取加载的位图并将其存储到位图对象中,以便我可以使用另一个 ImageView 调用 AlertDialog 并将其 ImageBitmap 设置为我存储的那个。
我使用这个 AsyncTask 类来做到这一点:
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
这是我在 onCreate 方法中调用的 Activity 中的方法:
public void loadUI() throws IOException {
prefs = getSharedPreferences(SELECTED_PREFS, MODE_PRIVATE);
lblEntryNumber = (TextView) findViewById(R.id.lblCEntryNumber);
lblEntryNumber.setText(cosplayerPrefs.getString(KEY_ENTRY_NUMBER, null));
ImageView imgReference = (ImageView) findViewById(R.id.imgReference);
if (prefs.getString(KEY_REFERENCE_LINK, null).startsWith("http")){
bImage = new DownloadImageTask((ImageView) findViewById(R.id.imgReference)).execute(cosplayerPrefs.getString(KEY_REFERENCE_LINK, null)).get();
} else {
Toast.makeText(ContestantActivity.this, "Invalid URL for Image...", Toast.LENGTH_SHORT).show();
}
imgReference.setOnClickListener(new View.OnClickListener() {
Bitmap clone = bImage;
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(ContestantActivity.this);
ImageView imgRefInflated = (ImageView) findViewById(R.id.imgRefInflated);
imgRefInflated.setImageBitmap(clone);
builder.setNegativeButton("Close", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.setContentView(R.layout.dialog_layout);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.show();
}
});
当我运行它时,应用程序在imgRefInflated.setImageBitmap(clone); 中遇到了一些错误,我不知道为什么。有没有人建议我可以做些什么来解决这个问题?
编辑: ImageView imgRefInflated 似乎返回 null,但我不明白为什么。
【问题讨论】:
-
究竟是什么错误?
-
这似乎是
imgRefInflated.setImageBitmap(clone);线上的 NullPointerException ,我很难理解为什么该对象为空,但是当我调试时我能够看到clone有里面有一个位图图像。 -
imgRefInflated似乎返回了一个空对象,因此它无法将位图图像分配给imgRefInflated
标签: android bitmap android-asynctask dialog imageview