[英]How do i get bitmap image from inputstream(base64 String) in android?
[英]How do I get a bitmap from AsyncTask and set it to my image
我正在嘗試使用AsyncTask將圖像URL轉換為位圖,以便將其設置為圖像。 我不明白如何從AsyncTask中獲取位圖,以便可以將其設置為循環創建的圖像。 我也嘗試將位圖設置為AsyncTask中的圖像。 我的理解是,所有操作都必須在AsyncTask內部完成,但是我無法引用要為其設置值的圖像。
我已經研究了URL到位圖轉換和AsyncTask的問題,但是我不知道如何將它們組合起來以獲得我想要的東西。 這必須是相當常見的任務。 為什么這么難?
如何在AsyncTask中引用我的圖像?
我可以返回位圖,然后將其設置為AsyncTask外部的圖像嗎?
有沒有更簡單的方法將URL設置為圖像源?
我已經包括了到目前為止的內容。
感謝您的幫助,並抽出寶貴的時間閱讀本文。
class BitmapTaks extends AsyncTask<String, Void, Bitmap> {
public Bitmap doInBackground(String... urls) {
Bitmap bm = null;
try {
URL aURL = new URL(urls[0]);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
Log.e("img", "Error getting bitmap", e);
}
return bm;
}
protected void onPostExecute(Bitmap bm) {
//do something after execute
}
}
只需定義鏈接到要使用位圖填充的視圖的最終ImageView變量:
//inside some method e.g. onCreate()
final ImageView imageView = (ImageView) findViewById(R.id.myPrettyImage);
new AsyncTask<String, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(String... params) {
/* here's your code */
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
imageView.setImageBitmap(bitmap);
}
}.execute(/*your params*/);
或者,您可以在AsyncTask擴展任務中創建ImageView字段:
private class ExtendedAsyncTask extends AsyncTask<String, Void, Bitmap> {
private ImageView[] views;
public void ExtendedAsyncTask(ImageView[] views) {
this.views = views;
}
@Override
protected Bitmap doInBackground(String... params) {
/* your code here */
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
for (ImageView view: views) {
view.setImageBitmap(bitmap);
}
}
}
並使用它:
ExtendedAsyncTask aTask = new ExtendedAsyncTask(new ImageView[]{myImageView1, myImageView2, myImageView3});
aTask.execute(/*some params*/);
這必須是相當常見的任務。 為什么這么難?
我真的建議您看看Android Volley庫 。 它可以抽象出所有這些AsyncTask樣板代碼。 這是一個很好的示例,說明如何設置圖像位圖
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
// If you are using normal ImageView
imageLoader.get(Const.URL_IMAGE, new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Image Load Error: " + error.getMessage());
}
@Override
public void onResponse(ImageContainer response, boolean arg1) {
if (response.getBitmap() != null) {
// load image into imageview
imageView.setImageBitmap(response.getBitmap());
}
}
});
您可以從此處了解更多信息: http : //www.androidhive.info/2014/05/android-working-with-volley-library-1/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.