2010-12-07 11 views
0

私はデータベースにクエリを接続し、その結果をSpinnerに表示しようとしています。以下は私がこれまで持っていたものです。残念ながらスピナーはクエリから返されるはずだった最後の行のみを表示します。上の例では、「Elvis Presley」だけがリストに表示されます。私は "Cursor.moveToFirst()"(あなたが見ることができます)を使用してみましたが、それはそれをしません。SimpleCursorAdapter from SQLiteDatabase 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だけが残されるまで値を上書きしています。私が示唆していることは、創作後にあなたのDBを反復し、すべてのvleuesをconsleに印刷することです。あなたは悲しい驚きを得るかもしれません... – codeScriber

答えて

2

コンテンツの値に値を入れています。

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

最後に、挿入文を書きます。だから、私の理解では、他のものが上書きされるので、本質的にContentValuesには1つの値しか入れません。

また、DDMSを使用してDBファイルを引っ張ると、すべてのentiresあなたはこのリク各コンテンツ値を挿入しようとすべきであるDB

であることを確認するためにSQLiteのブラウザを使用して開くことができます。 Plsはこれを試して、すべてのエントリがdbに作られるようにします。

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

+0

haha​​。それは時々起こる。 :) – Varun

関連する問題