2011-01-11 12 views
0

Ich arbeite an meiner ersten Android-App und habe eine SQLite-Datenbank eingerichtet und damit arbeiten, ich konnte erfolgreich einen Cursor verwenden, um einige Daten abzurufen und verwendet SimpleCursorAdapter, um die Daten als eine Liste erscheinen zu lassen.Wie kann ich Daten von einem einzelnen Feld in eine Variable aus einer SQLite-Datenbank bekommen?

ich jetzt zu suchen rufen Sie ein bestimmtes Feld und das Ergebnis in eine Variable vom Typ float setzen. Alle Beispiele, die ich online finde, scheinen jedoch zu erwarten, dass Sie große Retrievals mit mehreren Zeilen/Spalten verarbeiten und sie alle in Listen oder Arrays angepasst wurden. Ich kann nicht herausfinden, wie man nur den Inhalt dieses einen Feldes in eine Variable bringt.

Ich versuchte mit myVariable = cursor.getFloat(0), die ich denke, ist entlang der richtigen Linie, aber ich konnte das nicht funktionieren entweder.

Jedes Mal, wenn ich meine Anwendung ausführen, bekomme ich nur null pointer exception Fehler, ich habe versucht, einige try catch Blöcke, aber ich bin neu zu all dem im Allgemeinen und hatte keinen Erfolg bei der Fehlersuche. Es könnte etwas ein einfaches wie eine Abfrage Tippfehler sein.

Ich werde das Bit Code unten beteiligt, aber alle Vorschläge allgemein oder spezifisch sind willkommen, Danke, dass Sie sich die Zeit zu sehen.

public void Main(){ 

    //gets the rowId we put with the intent from Budget.java, sets a default value of -1 'incase. 
    selectedRowId = getIntent().getLongExtra("rowId", -1); 
    Cursor costCursor= FindBudgetForId(selectedRowId); 
    MyText(costCursor, selectedRowId); 

} 

public Cursor FindBudgetForId(long selectedRowId){ 

    SQLiteDatabase db = budgetData.getWritableDatabase(); 
    String rowBudgetQuery = "SELECT BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE _ID="+ selectedRowId; 
    Cursor c = db.rawQuery(rowBudgetQuery,null); 
    startManagingCursor(c); 
    return c; 


} 

public void MyText(Cursor costCursor, long selectedRowId){  
    TextView whatDoText=(TextView)this.findViewById(R.id.keypad_text); 
    whatDoText.setText("row: " +(String.valueOf(selectedRowId))); 
    //set the current budget amount in the edit text box 
    retrievedAmount = costCursor.getFloat(3); 
    EditText inputHint=(EditText)this.findViewById(R.id.cost_input); 
    inputHint.setText((String.valueOf(retrievedAmount))); 

} 
+0

Ihre Abfrage wählt nur 1 Feld, so dass der Index 3 ist außerhalb der Grenzen. Sie sollten cursor.getFloat (0) –

+0

@king_nak verwenden: natürlich danke für das Hinzeigen, noch kann es nicht laufen, aber das ist ein Fehler weniger danke! – Holly

Antwort

4

Ich glaube, dass, wenn SqliteDatabase#rawQuery einen Cursor zurückgibt, ist es zunächst vor das erste Ergebnis positioniert ist. Um also tatsächlich einen Wert aus dem Ergebnis zu lesen, das Sie erhalten (ohne NullPointerExceptionExplosionDeath zu erhalten), rufen Sie cursor.moveToFirst() auf, bevor Sie den Float erhalten. Davon bin ich schon einmal gebissen worden.

+0

oh danke für die Idee, aber vor der Abfrage, die Sie sagen? Wie kann es den Cursor an die erste Position bewegen, ohne dass ich ihm erzähle, mit welcher Tabelle ich es zu tun habe? Wie auch immer, danke für den Rat, ich habe es vorher und nachher versucht, aber kein Glück, also denke ich, dass das Problem woanders sein muss. Danke trotzdem, ich werde sicher behalten, was du gesagt hast! – Holly

+0

Ah, tut mir leid, wenn es nicht klar war. Nach der Abfrage an die Datenbank ("rawQuery") zeigt der Cursor, der zurückgegeben wird, * nichts * an (die Position vor dem ersten Ergebnis - wie ein Index von -1). Bevor Sie 'getFloat' aufrufen, * also *, wenn Sie' moveToFirst() 'aufrufen. Hilft das? –

+0

Hey, ich dachte, ich sollte erwähnen, dass dies nicht mein Problem war (es stellte sich heraus, dass ich den Kontext nicht richtig an meine sqliteopenhelper-Klasse weitergegeben habe, aber sobald ich das getan habe), erwies es sich als äußerst hilfreich wie ich genau wusste, wie man mit dem Cursor außerhalb der Grenzen Fehler, die nach, kam, also danke !! – Holly

1

Sie können Daten erhalten wie

Cursor c =//Query; 
    int numRows = c.getCount(); 
if (numRows > 0) 
    { 
    c.moveToFirst(); 
    While(numRows>0) // or for loop 
    { 
      String strName = c.getString(0); 
       Int i = c.getInt(1); 
       numRows--; 
    }  
    } 
Verwandte Themen