私はAndroid開発に比較的慣れておらず、ImageViewとTextViewを使用してカスタムListViewを作成しようとしています。URLをビットマップ画像に変換してから、その画像をimageViewに表示しようとしています。ただし、エラーが発生し、アプリケーションがすぐにクラッシュします。imageViewでドローアブルを表示できました。いくつかの変更を加えてビットマップを表示しようとすると、アプリケーションがクラッシュしました。どんな助けでも大歓迎です。これが私の3つのクラスです:
編集非同期タスクを使用して別のスレッドでビットマップイメージを取得しましたが、アプリがクラッシュしなくなりました。ただし、アクティビティを開始するとリストビューが表示されません。これが私の更新されたコードです。
編集コードを再度変更しましたが、非同期タスクのexecuteメソッドでimageViewのみを渡しています。リストビューにテキストを表示できるようになりましたが、画像が表示されません。これが私の編集したコードです。
編集デバッガーを使用して、ビットマップが表示されなかった理由を調べ、ビットマップ変数がnullであることがわかりました。これは、インターネットのアクセス許可を追加していなかったためです。権限を追加した後、私のアプリは指定された行でクラッシュし始めました:
b = BitmapFactory.decodeStream(image_url.openConnection() .getInputStream());
OutofMemoryエラーが原因でRuntimeExceptionが発生しました。これを解決する方法がわかりません。助けていただければ幸いです。ありがとう !
これが私のLoadimageAsyncTaskクラスです。
public class LoadImage extends AsyncTask<String, Integer, Bitmap>{
Context callingContext = null;
Bitmap b = null;
ImageView view;
public LoadImage(ImageView view){
this.view = view;
}
@Override
protected Bitmap doInBackground(String... arg0) {
// TODO Auto-generated method stub
String p_url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
Bitmap b = null;
try {
URL image_url = new URL(p_url);
b = BitmapFactory.decodeStream(image_url.openConnection() .getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
view.setImageBitmap(result);
}
}