2014-05-10 11 views
7

ist das richtig. Ich habe dies gridview. Ich möchte seinen Artikel als Blob in SQLite speichern. so, wenn ich die Liste öffnen von Daten in SQLite krank speichern nur die items speichern laden und rufen adapter.notifyDataSetChanged meiner gridviewAndroid Objekt speichern als Blob in sqlite

versuchte ich dieses aber ich bekomme NotSerializableException Fehler

Listenelemente = new Arraylist();

public static byte[] serializeObject(Object o) { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

     try { 
      ObjectOutput out = new ObjectOutputStream(bos); 
      out.writeObject(o); 
      out.close(); 

      // Get the bytes of the serialized object 
      byte[] buf = bos.toByteArray(); 

      return buf; 
     } catch (IOException ioe) { 
      Log.e("serializeObject", "error", ioe); 

      return null; 
     } 
    } 

meine Einfügezeile

public long insertRow(byte[] data) { 
    /* 
    * CHANGE 3: 
    */ 
    // TODO: Update data in the row with new fields. 
    // TODO: Also change the function's arguments to be what you need! 
    // Create row's data: 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_DATA, data); 

    // Insert it into the database. 
    return db.insert(DATABASE_TABLE, null, initialValues); 
} 

dann füge ich die serialize Objekt

myDB.insertRow(MyDBAdapter.serializeObject(items)); 

auch confuse ich bin. Soll ich den Adapter oder die Liste der Artikel speichern?

Antwort

21

Die Art, wie ich Daten als BLOB in meiner Datenbank speichern kann, besteht darin, sie in JSON zu konvertieren und dann die Bytes zu speichern. z.B.

ArrayList<Person> persons = new ArrayList<>(); 
Gson gson = new Gson(); 
ContentValues values = new ContentValues(); 
values.put(MyProvider.KEY_DATA, gson.toJson(persons).getBytes()); 
// insert or update the DB 

und die Liste zurück

byte[] blob = cursor.getBlob(cursor.getColumnIndex(MyProvider.KEY_DATA)); 
String json = new String(blob); 
Gson gson = new Gson(); 
ArrayList<Person> persons = gson.fromJson(json, new TypeToken<ArrayList<Person>>() 
           {}.getType()); 

bearbeiten erhalten: Ihre letzte Frage zu beantworten, sollten Sie Ihre Daten speichern (Liste der Artikel).

+0

Was meinst du? Wie speichert man eine Liste von Artikeln? Oder wie man sie zurückbekommt? –

+0

Wie man sie zurückbekommt – user3487657

+0

Bearbeitete die Antwort, um zu demonstrieren, wie man sie zurückbekommt :) –

Verwandte Themen