2013-08-08 8 views
5

ich weiß, ein Cursor Verfahren erhalten hat für String, Int, etc ist aber nicht da irgendwas alsAndroid Cursor? Wie lese ich Objektdaten?

mycursor.GetObject(index) 

ich eine dynamische Methode erstellt werden soll, die ein Objekt zurückgibt, und ich es nur werfen.

oder ist es möglich, mycursor.GetString(index) für jeden Typ zu verwenden? String,Float,Double,Long,Short, Blob,Int, etc.

und ich kann zum Beispiel für eine Float oder Int oder einen beliebigen Typ verwenden und es umwandeln?

zum Beispiel

(Blob) newblob=mycursor.GetString(i_return_BloB); 
(Int) newint=mycursor.GetString(i_return_Int); 
(Float) newfloat=mycursor.GetString(i_return_Float); 
(Double) newdouble=mycursor.GetString(i_return_Double); 
(Long) newlong=mycursor.GetString(i_return_long); 
(Short) newshort=mycursor.GetString(i_return_short); 

würde es funktionieren? könnte ich mycursor.GetString() für jeden Typ verwenden?

Antwort

4

Sie können get the type of a column, und rufen Sie dann die entsprechende Methode aus einer switch-Anweisung (und erstellen Sie die Methode, die Sie selbst fordern).

Verwendung getString für verschiedene Arten ist nicht sicher, da die Dokumentation angegeben:

das Ergebnis und ob diese Methode gibt eine Ausnahme aus, wenn der Spaltenwert null ist oder der Spaltentyp ist keine String-Typ-Implementierung ist -definiert.

+0

android.database.Cursor hat nicht getType() das war meine Idee mit einem swich oder wenn aber nicht GetType (Spaltenindex) – angel

+0

Verfügbar auf apilevel> = 11 ... scheint es gibt keine geeignete Methode für ältere Androids, siehe http://stackoverflow.com/questions/11658239/cursor-gettype-for-api-level-11 – dst

+0

Workaround: http://StackOverflow.com/a/6145969/2636001 – dst

2

Sie wollen, wie etwas versuchen:

DataBaseHelper myDbHelper = new DataBaseHelper(this); 

ArrayList<String> mArrayList = new ArrayList<String>(); 

String[] array; 

Cursor c = myDbHelper.query(query); 

int id = c.getColumnIndex("COLUMN_NAME"); 

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
    mArrayList.add(c.getString(id)); 
} 

array = mArrayList.toArray(new String[0]); 


System.out.println(array[0]); 

c.close(); 

myDbHelper.close(); 

Und Ihre query() sollte in etwa so aussehen:

public Cursor query(String query){ 

    String selectAll = null; 

    if(query.length() > 1){ 

    selectAll = "SELECT TABLENAME.COLUMNAME FROM TABLENAME WHERE TABLENAME.COLUMNNAME LIKE" + query + ";"; 

    return myDataBase.rawQuery(selectAll, null); 
} 

Sie müssen den SQL-Code ändern, um Ihre Bedürfnisse anzupassen. In diesem Fall lade ich jeden Wert einer Spalte ab, der der Abfrage entspricht, aber Sie könnten die SELECT-Anweisung ändern. Ich hoffe es hilft.