我做了一個android應用程序,當網絡不可用時,圖像將保存到本地數據庫。我保持數據庫表中的圖像uri,並從圖像uri中檢索圖像,並使用自定義數組適配器在的上顯示該圖像。當我使用模擬器運行我的應用程序時,它運行良好。不過在使用Android手機時卻顯示強制關閉錯誤。爲什麼我的android應用程序的自定義ArrayAdapter沒有顯示圖像?
錯誤日誌如下:
public class NoteListAdapter extends ArrayAdapter<ImageFromDB> {
Context c;
ArrayList<ImageFromDB> image = null;
ArrayList<String> uriImage = null;
ArrayList<Integer> ID = null;
private AllId allid = null;
DBAdapter db = null;
WatchListAllEntity watchListAllEntity=null;
int flagVariable=1;
private ArrayList<ImageFromDB> items;
public NoteListAdapter(Context context, int textViewResourceId,
ArrayList<ImageFromDB> items) {
super(context, textViewResourceId, items);
Log.e("sf","123");
this.items = items;
c=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final int myPosition = position;
if (v == null) {
LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitempict2, null);
}
ImageFromDB re = items.get(position);
Log.e("re", re+"");
if (re != null) {
ImageView tt = (ImageView) v.findViewById(R.id.imageviewproduct);
String imageUri = re.getImageuri();
Log.e("imageUri", imageUri+"");
tt.setImageURI(Uri.parse(imageUri));
final CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkboxproduct);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
if(flagVariable==1)
{
String ImUri = items.get(myPosition).getImageuri();
allid.setImageUri(ImUri);
allid.setId(items.get(myPosition).getId());
flagVariable++;
Log.e("flagVariable : " , flagVariable+"");
}
else
{
checkBox.setChecked(false);
//Toast.makeText(Syncho2.this,"正しく選んでください。",Toast.LENGTH_SHORT).show();
}
} else {
flagVariable=1;
Log.e("flagVariable : " , flagVariable+"");
}
}
});
}
return v;
}
}
我從這樣的活動調用此適配器:
noteListAdapter = new NoteListAdapter(this, R.layout.listitempict, image);
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:504)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:370)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:715)
at android.graphics.drawable.Drawable.createFromStream(Drawable.java:675)
at android.widget.ImageView.resolveUri(ImageView.java:525)
at android.widget.ImageView.setImageURI(ImageView.java:309)
at com.freedom.net.Syncho2$NoteListAdapter.getView(Syncho2.java:219)
at android.widget.AbsListView.obtainView(AbsListView.java:1519)
at android.widget.ListView.makeAndAddView(ListView.java:1749)
at android.widget.ListView.fillDown(ListView.java:674)
at android.widget.ListView.fillFromTop(ListView.java:731)
at android.widget.ListView.layoutChildren(ListView.java:1602)
at android.widget.AbsListView.onLayout(AbsListView.java:1349)
at android.view.View.layout(View.java:7320)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1263)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1137)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1051)
at android.view.View.layout(View.java:7320)
at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
at android.view.View.layout(View.java:7320)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1263)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1137)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1051)
at android.view.View.layout(View.java:7320)
at android.widget.FrameLayout.onLayout(FrameLayout.java:342)
at android.view.View.layout(View.java:7320)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1162)
我的自定義適配器如下
我注意到調試,適配器正在被稱爲六次當時的形象只有兩個。 五次它返回一個視圖但第六次它顯示該錯誤。
我敢肯定,壓縮位圖將不會在這種情況下完全幫助 - 應用程序將forceclose不上sixs的時間,但是,16S'(對於〔實施例)=) – dilix 2012-08-02 10:46:00
這不是壓縮,這是關於加載縮小版的圖像。在屏幕上,您不需要顯示8Mp圖像。只需加載縮小到您的屏幕大小的圖像。 – 2012-08-02 10:51:57
「我從調試中注意到,適配器在圖像只有兩個時調用了六次」 - 正如您所看到的,即使他將圖像縮小了一些,問題不僅出現在縮放圖像中,它也只會幫助您不會掉到六個'一步 - 但它會在一段時間後關閉。 – dilix 2012-08-02 10:55:50