2012-03-31 47 views
0

以下是Andoird中SQLite中用于调查应用程序的数据库。每次进行的调查都是存储在数据库中的记录。从数据库中显示条目的问题

我已成功创建数据库(和数据库存在 - 我用SQLite浏览器来通过所有不同的记录)。

但是,在进行一些调查后,我遇到了显示所有记录的问题。只有第一次调查才会显示在活动中。即使它们存在于内存中也不会显示其他记录。我的简单游标适配器有问题吗?

这里是我的数据库类:

package nidhin.survey; 


import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 

public class Database extends Activity { 
    private static final SimpleCursorAdapter SimpleCursorAdapter = null; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.database); 

     ListView lv=(ListView)findViewById(R.id.mylist); 
     lv.setClickable(true); 

     Button button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 


     Intent intent=new Intent(Database.this,MainMenu.class); 
      startActivity(intent); 

      } 
     }); 


     Intent sender=getIntent(); 

     DatabaseHelper dbh = new DatabaseHelper(this); 

     Cursor c = dbh.getReadableDatabase().rawQuery("SELECT _id, " + 
         DatabaseHelper.COL_NAME + 
       ", " + DatabaseHelper.VALUE1 + 
       ", " + DatabaseHelper.VALUE2 + 
       " FROM " + 
       DatabaseHelper.TABLE_NAME, null); // initializing 

     String[] dataFrom ={DatabaseHelper.COL_NAME, DatabaseHelper.VALUE1, DatabaseHelper.VALUE2};//, DatabaseHelper.VALUE3, DatabaseHelper.VALUE4, DatabaseHelper.VALUE5, DatabaseHelper.VALUE6, DatabaseHelper.VALUE7, DatabaseHelper.VALUE8, DatabaseHelper.VALUE9, DatabaseHelper.VALUE10, DatabaseHelper.VALUE11}; 
     int[] dataTo = {R.id.name, R.id.value1, R.id.value2};//, R.id.value3, R.id.value4, R.id.value5, R.id.value6, R.id.value7, R.id.value8, R.id.value9, R.id.value10, R.id.value11}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.row, c, dataFrom, dataTo); 

     lv.setAdapter(adapter); 

    } 

    public void onListItemClick() 
    { 

    } 


} 

和数据库帮手:

package nidhin.survey; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DatabaseHelper extends SQLiteOpenHelper { 

static final String TABLE_NAME = "mygrades"; 
static final String COL_NAME = "name"; 
static final String VALUE1 = "ClassNumber"; 
static final String VALUE2 = "value2"; 
static final String VALUE3 = "value3"; 
static final String VALUE4 = "value4"; 
static final String VALUE5 = "value5"; 
static final String VALUE6 = "value6"; 
static final String VALUE7 = "value7"; 
static final String VALUE8 = "value8"; 
static final String VALUE9 = "value9"; 
static final String VALUE10 = "value10"; 
static final String VALUE11 = "value11"; 


DatabaseHelper(Context context) 
{ 
    super(context, "grades.sqlite", null, 20); 
} 

@Override 
public void onCreate(SQLiteDatabase db) 
{ 


    db.execSQL("CREATE TABLE " + TABLE_NAME + 
       "(_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COL_NAME + " TEXT, " + 
       VALUE1 + " TEXT, " + 
       VALUE2 + " TEXT, " + 
       VALUE3 + " TEXT, " + 
       VALUE4 + " TEXT, " + 
       VALUE5 + " TEXT, " + 
       VALUE6 + " TEXT, " + 
       VALUE7 + " TEXT, " + 
       VALUE8 + " TEXT, " + 
       VALUE9 + " TEXT, " + 
       VALUE10 + " TEXT, " + 
       VALUE11 + " TEXT);"); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    android.util.Log.w("cars", "Upgrading database, all table info will be lost"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(db); 
} 

} 
+1

可能是你正在更新相同的记录,而不是插入新记录?你有没有检查数据库中的记录?您可以在 /data/data /您的包装名称/ databases/DB NAME.db找到数据库 – 2012-03-31 18:17:48

+0

您是否在上一个问题中说过您解决了问题? – Luksprog 2012-03-31 18:18:28

+0

让我检查...... – 2012-03-31 18:18:47

回答

0

我们来试试这又

试试这个:

在你的数据库助手(注意应该有5个空值) :

public Cursor fetchAllSurveys() { 
    return mDb.query(TABLE_NAME, new String[] { "_id", COL_NAME, VALUE1,VALUE2 }, null, null, null, null, null); 
} 

在你的onCreate它会像这样使用:

Cursor c = dbh.fetchAllSurveys(); 
String[] dataFrom ={DatabaseHelper.COL_NAME, DatabaseHelper.VALUE1, DatabaseHelper.VALUE2}; 
int[] dataTo = {R.id.name, R.id.value1, R.id.value2}; 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, c, dataFrom, dataTo); 
lv.setAdapter(adapter); 

希望这有助于!

+0

什么是会员等级和地位? – 2012-03-31 18:50:22

+0

这些是列ID ...你可以将它们更改为VALUE1,VALUE 2等。 – Barak 2012-03-31 18:53:05

+0

我看到你有5列MEMBER_ROWID, MEMBER_LAST,MEMBER_FIRST,MEMBER_RANK,MEMBER_STATUS;但我只有3列 – 2012-03-31 19:03:11

0

调用Cursor.moveToFirst,如:

if (c !=null) 
{ 
    c.moveToFirst(); 
} 

之前分配这一行:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.row, c, dataFrom, dataTo); 
+0

此声明将c移动到第一行对吗?但是我们想要检索所有记录吗? – 2012-03-31 18:41:19

+0

试试吧,它会工作! – 2012-03-31 18:43:22

+0

我试过并把它放在简单的适配器线上,就像你说的,但仍然是一样的:-( – 2012-03-31 18:48:17