0

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!

+0

können Sie posten Sie Ihre DbBitmapUtility.java – Zartha

+0

warum müssen Sie nicht faul Laden seine besser –

+0

'cursor.moveToFirst() verwenden;' 'innen setViewValue' ... faszinierende – Selvin

Antwort

0

Jetzt funktioniert es ... Ich weiß nicht, warum es gestern nicht funktionierte. Ich dachte, ich hätte es versucht und es hat nicht funktioniert, aber jetzt tut es.

private void populateListView(){ 
    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); 
    cursor.moveToFirst(); 

    cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int i) { 

      if(view.getId() == R.id.list_view_image) { 
       imageView = (ImageView) view.findViewById(R.id.list_view_image); 

       Bitmap image = null; 
       byte[] blob = cursor.getBlob(i); 
       if(blob!=null){ 
        System.out.println("blob: "+blob.toString()); 
        image = DbBitmapUtility.getImage(blob); 
        imageView.setImageBitmap(image); 
       } else { 
        imageView.setImageResource(R.drawable.ic_image_white); 
       } 
      return true; 
      } 
      return false; 
     } 
    }); 
    listView.setAdapter(cursorAdapter); 
    listView.setTextFilterEnabled(true); 
} 
Verwandte Themen