2017-08-02 3 views
0

Je suis en train d'obtenir un blob de sqlite à chaîne, s'il vous plaît voir ci-dessous:blob image SQLite à chaîne

ArrayList<Sudentdb> list; 

GridView gridView; 

final String[] from = new String[] { SQLiteHelper._ID, 
     SQLiteHelper.NAME, SQLiteHelper.AGE, SQLiteHelper.PROFILE }; 

final int[] to = new int[] { R.id.rowid, R.id.txtName, R.id.studentage, R.id.profileimageV }; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.studentfragment, null); 

    gridView = (GridView) v.findViewById(R.id.gridView); 

    DBManager dbManager = new DBManager(getActivity()); 
    dbManager.open(); 

    Cursor cursor = dbManager.fetch(); 

    list = new ArrayList<>(); 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.single_item, cursor, from, to, 0); 

    gridView.setAdapter(adapter); 

J'ai testé revenir seul le texte et il renvoie correctement, mais avec des images que je reçois erreur:

android.database.sqlite.SQLiteException: unknown error (code 0): Unable to convert BLOB to string 

Je suppose que je dois d'abord obtenir l'image de la base de données ?? De l'aide?

EDIT

Je comprends pourquoi vous pensez que cette question est un double de SimpleCursorAdapter how to show an image? mais cette question l'image est enregistrée dans le dossier étirables et il sauve et appeler le nom de cette image en tant que chaîne en sqlite. Dans mon cas, l'image est dans la galerie et je l'enregistre comme un blob dans SQLite (dans une autre activité) et maintenant j'essaye de récupérer le blob de la base de données et de l'afficher dans un GridView.

Ainsi, dans la réponse qui suit ne marchera pas pour moi:

int resID = getApplicationContext().getResources().getIdentifier(cursor.getString(columnIndex), "drawable", getApplicationContext().getPackageName()); 
IV.setImageDrawable(getApplicationContext().getResources().getDrawable(resID)); 

Répondre

0

Vous pouvez l'utiliser pour obtenir blob comme octet [] de SQLITE

byte[] img = cursor.getBlob(cursor.getColumnIndex(IMG_SRC)); 

puis convertir octet [] pour bitmap en utilisant ci-dessous la méthode Util ...

public static Bitmap getbitmap(byte[] img) { 
     return BitmapFactory.decodeByteArray(img, 0, img.length); 
    } 
+0

Ok et comment vais-je ajouter chaque image dans un viewholder spécifique? Actuellement, je définis le texte dans chaque viewholder avec SimpleCursorAdapter – ClassA

+0

ok utilisez simplement yourholder.imgview.setImageBitmap (bitmap); –

+0

s'il vous plaît regarder mon code 'final int [] à la position de l'image est déterminée par l'ID de la ligne dans SQLite – ClassA