2010-12-07 59 views
0

我試圖連接查詢數據庫並在微調框中顯示結果。以下是我到目前爲止。不幸的是微調只顯示應該從查詢返回的最後一行。所以從上面的例子來看,只有「埃爾維斯普雷斯利」出現在名單中。我試過使用「Cursor.moveToFirst()」(正如你所看到的),但那並不是。SQLiteDatabase中的SimpleCursorAdapter光標無法在Spinner適配器中正確顯示

我意識到我每次打開它時都會重建和更新數據庫。我現在就是這麼做的。

package com.conceptualsystems.android4api.sms; 

import java.util.List; 
import java.util.ArrayList; 
import java.util.LinkedList; 

import android.app.Activity; 
import android.app.Dialog; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 
import android.view.Window; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.LayoutInflater; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.widget.SimpleCursorAdapter; 


public class smsActivity extends Activity 
{ 
    private static class smsDbOpenHelper extends SQLiteOpenHelper { 

     smsDbOpenHelper(Context context) { 
      super(context,smsDbSchema.DATABASE_NAME, null, smsDbSchema.DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(smsDbSchema.CustomerSchema.CREATE_TABLE); 
      db.execSQL(smsDbSchema.ProductSchema.CREATE_TABLE); 
     } 

     @Override 
     public void onOpen(SQLiteDatabase db) { 
      //open db 
      db.execSQL("DROP TABLE IF EXISTS " + smsDbSchema.CustomerSchema.TABLE_NAME); 
      db.execSQL("DROP TABLE IF EXISTS " + smsDbSchema.ProductSchema.TABLE_NAME); 
      this.onCreate(db); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      //upgrade db 
     } 
    } 

    private smsDbOpenHelper mDbHelper; 
    private SQLiteDatabase mDb; 



    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     mDbHelper = new smsDbOpenHelper(getApplicationContext()); 
     mDb = mDbHelper.getReadableDatabase(); 

     //fill customer table with some fake data 
      ContentValues cv = new ContentValues(); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Charles Keith Gilliam"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Jarrod Martin"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "John Lennon"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Sammy Hagar"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "David Lee Roth"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Keith Richards"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Steven Tyler"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Brent Michaels"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Eddie Veder"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Kurt Cobain"); 
      cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Elvis Presley"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "0298437598745"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
      mDb.insert(smsDbSchema.CustomerSchema.TABLE_NAME, null, cv); 

      //cv. 

     setScreen(R.layout.inbound); 

     Spinner custSpn = (Spinner)findViewById(R.id.cust_spn); 
     Cursor custCur = null; 
     try { 
      custCur = mDb.query(smsDbSchema.CustomerSchema.TABLE_NAME, null, null, null, null, null, null); 
     } catch(Exception e) { 
      Log.e("smsdb", e.toString()); 
     } 
     custCur.moveToFirst(); 
     startManagingCursor(custCur); 
     SimpleCursorAdapter qc = new SimpleCursorAdapter(
      this, 
      android.R.layout.simple_spinner_item, 
      custCur, 
      new String[] {smsDbSchema.CustomerSchema.COLUMN_NAME}, 
      new int[] {android.R.id.text1} 
     ); 
     qc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     custSpn.setAdapter(qc); 

     Spinner prdSpn = (Spinner)findViewById(R.id.prd_spn); 
     Cursor prdCur = null; 
     try { 
      prdCur = mDb.query(smsDbSchema.ProductSchema.TABLE_NAME, null, null, null, null, null, null); 
     } catch(Exception e) { 
      Log.e("smsdb", e.toString()); 
     } 
     prdCur.moveToFirst(); 
     startManagingCursor(prdCur); 
     qc = new SimpleCursorAdapter(
      this, 
      android.R.layout.simple_spinner_item, 
      prdCur, 
      new String[] {smsDbSchema.ProductSchema.COLUMN_NAME}, 
      new int[] {android.R.id.text1} 
     ); 
     qc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     prdSpn.setAdapter(qc); 

     mDb.close(); 
    } 

    public void setScreen(int resource) { 
     setContentView(resource); 

     if(resource==R.layout.inbound) { 
      //setup main entry screen 
      final Button transmit = (Button)findViewById(R.id.transmit_btn); 
      final Button clear = (Button)findViewById(R.id.clear_btn); 
      transmit.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // transmit data //////// 
        ///////////////////////// 
       } 
      }); 
      clear.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 

        //clear fields 
       } 
      }); 
     } 
    } 
} 
+0

你的查詢看起來不錯,但我不確定你的數據庫是否正確。我認爲你用clumn插入的每個值都註冊爲最後一個有效的值,所以你只需覆蓋值直到Evlis剩下。我建議的是在創建完成後迭代你的數據庫並打印到consle所有的應用程序中,你可能會得到一個令人難過的驚喜... – codeScriber 2010-12-07 19:01:09

回答

2

您將內容值中的值。

ContentValues cv = new ContentValues(); 
cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Charles Keith Gilliam"); 
.. 
.. 
.. 

Anf finally u write a insert statement。所以,根據我的理解,基本上你在ContentValues中只輸入一個值,因爲其他值被覆蓋。

您也可以使用DDMS拉數據庫文件,並使用SQLite瀏覽器,使所有entires有沒有在DB

你應該嘗試插入LIK這每一個內容值開。請嘗試此操作,以便所有條目都在數據庫中創建。

cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Charles Keith Gilliam"); 
cv.put(smsDbSchema.CustomerSchema._ID, "7585684317298"); 
mDb.insert(smsDbSchema.CustomerSchema.TABLE_NAME, null, cv); 

cv.put(smsDbSchema.CustomerSchema.COLUMN_NAME, "Jarrod Martin"); 
cv.put(smsDbSchema.CustomerSchema._ID, "0298437598745"); 
mDb.insert(smsDbSchema.CustomerSchema.TABLE_NAME, null, cv); 
+0

/facepalm。就是這樣。謝謝! – moonlightcheese 2010-12-07 19:13:44

相關問題