Ich möchte ein Bild aus meiner Datenbank in einem Listenansicht, falls einer existiert. Wenn kein Bild vorhanden ist, wird ein Symbol aus meinem aufklappbaren Ordner angezeigt. Aber wenn ich versuche, es aus dem Cursor Cursor abrufen.getBlob (i) ist immer Null und die Listview zeigt immer den Symbol Platzhalter. Weiß jemand, warum das so ist?Bild vom Cursor abgerufen ist null (simplecursoradapter)
ist hier mein Code:
private void populateListView(){
Cursor cursor = myDb.getAllItems();
String[] fromFieldNames = new String[] {Database.COL_IMAGE, Database.COL_DATE, Database.COL_HEAD};
int[] toViewIds = new int[] {R.id.list_view_image, R.id.list_view_date, R.id.list_view_headline};
cursorAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.list_view_search, cursor, fromFieldNames, toViewIds, 0);
cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int i) {
cursor.moveToFirst();
if(view.getId() == R.id.list_view_image) {
imageView = (ImageView) view.findViewById(R.id.list_view_image);
Bitmap image = DbBitmapUtility.getImage(cursor.getBlob(i));
if (image != null) { //image is somehow always null... I have tried everything to extract this image but it won't work
imageView.setImageBitmap(image);
} else {
imageView.setImageResource(R.drawable.ic_image_white);
}
return true;
}
return false;
}
});
listView.setAdapter(cursorAdapter);
listView.setTextFilterEnabled(true);
}
Hier die logcat ist:
FATAL EXCEPTION: main
Process: com.example.koesc_000.pocketdiary, PID: 14153
java.lang.NullPointerException: Attempt to get length of null array
at com.example.koesc_000.pocketdiary.DbBitmapUtility.getImage(DbBitmapUtility.java:30)
at com.example.koesc_000.pocketdiary.Activities.SearchActivity$1.setViewValue(SearchActivity.java:83)
at android.widget.SimpleCursorAdapter.bindView(SimpleCursorAdapter.java:146)
at android.widget.CursorAdapter.getView(CursorAdapter.java:254)
at android.widget.AbsListView.obtainView(AbsListView.java:2823)
at android.widget.ListView.makeAndAddView(ListView.java:1884)
at android.widget.ListView.fillDown(ListView.java:713)
at android.widget.ListView.fillFromTop(ListView.java:779)
at android.widget.ListView.layoutChildren(ListView.java:1693)
at android.widget.AbsListView.onLayout(AbsListView.java:2627)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1702)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1556)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:16711)
at android.view.ViewGroup.layout(ViewGroup.java:5328)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2319)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2032)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6642)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
EDIT: Hier ist DbBitmapUtility:
public class DbBitmapUtility {
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
if(bitmap != null){
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 10, stream);
return stream.toByteArray();
}else{
return null;
}
}
// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
}
Dank!
können Sie posten Sie Ihre DbBitmapUtility.java – Zartha
warum müssen Sie nicht faul Laden seine besser –
'cursor.moveToFirst() verwenden;' 'innen setViewValue' ... faszinierende – Selvin