2016-03-04 149 views
-1

我在創建數據庫和在列表視圖中顯示數據時遇到了問題,我對核心概念還不太清楚。列表視圖不顯示數據庫中的數據Android

我編碼的ListView不顯示任何內容。

數據庫Helper類(其中創建和管理數據庫類):

public class DBController extends SQLiteOpenHelper{ 

    private static final String DATABASE_NAME = "quiz.db"; 
    private static final String TABLE_NAME = "questions"; 
    //DATABASE COLUMNS 
    private static final String COL1 = "que"; 
    private static final String COL2 = "opta"; 
    private static final String COL3 = "optb"; 
    private static final String COL4 = "optc"; 
    private static final String COL5 = "ans"; 
    public DBController(Context applicationcontext) { 
     super(applicationcontext, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) { 
     String query; 
     query = "CREATE TABLE IF NOT EXISTS "+TABLE_NAME+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, "+COL1+" TEXT, "+COL2+" TEXT, "+COL3+" TEXT,"+COL4+" TEXT,"+COL5+" TEXT);"; 
     database.execSQL(query); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) { 
     String query; 
     query = "DROP TABLE IF EXISTS questions"; 
     database.execSQL(query); 
     onCreate(database); 
    } 

    public void insertQuestion(Datas data) 
    { 
     this.getWritableDatabase().rawQuery("INSERT INTO "+TABLE_NAME+"("+COL1+","+COL2+","+COL3+","+COL4+","+COL5+") VALUES('"+data.getQuestion()+"','"+data.getOptionA()+"','"+data.getOptionB()+"','"+data.getOptionC()+"','"+data.getAnswer()+"');", null); 
    } 
    public Cursor getAllData() 
    { 
     return this.getWritableDatabase().rawQuery("SELECT * FROM "+TABLE_NAME, null); 
    } 
} 

代碼,我加入到顯示的ListView如下,

我只添加OnCreate()方法活動類別

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_questions); 
     DBController db = new DBController(getApplicationContext()); 
     int from[] = {android.R.id.text1,android.R.id.text2}; 
     String to[] = {"que","ans"}; 
     SimpleCursorAdapter sdp = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,db.getAllData(),from,to,0); 
     ListView lv =(ListView) findViewById(R.id.listView1); 
     lv.setAdapter(sdp); 
    } 
+1

你檢查過,如果db.getAllData()返回任何東西? –

+0

嘗試將'android.R.layout.simple_list_item_1'更改爲自定義列表項。引用http://stackoverflow.com/questions/35728510/android-data-is-allocated-in-spinner-but-when-selected-not-showing-the-value-in/35728825#35728825 – ELITE

回答

0

db.getAllData()導致該問題。

正確的代碼爲getAllData()方法是,

public Cursor getAllData() 
{ 
     Cursor cursor = getReadableDatabase().query(TABLE_NAME, 

      new String[] { "_id" , COL1, COL2, COL3, COL4, COL5}, 
      null, null, null, null, null); 
      cursor.moveToFirst(); 
      return cursor; 
} 

光標定位是問題。

0

更改DBController有了這個

public class DBController extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "quiz.db"; 
    private static final String TABLE_NAME = "questions"; 
    //DATABASE COLUMNS 
    private static final String COL1 = "que"; 
    private static final String COL2 = "opta"; 
    private static final String COL3 = "optb"; 
    private static final String COL4 = "optc"; 
    private static final String COL5 = "ans"; 

    public DBController(Context applicationcontext) { 
     super(applicationcontext, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) { 
     String query; 
     query = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + COL1 + " TEXT, " + COL2 + " TEXT, " + COL3 + " TEXT," + COL4 + " TEXT," + COL5 + " TEXT);"; 
     database.execSQL(query); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) { 
     String query; 
     query = "DROP TABLE IF EXISTS questions"; 
     database.execSQL(query); 
     onCreate(database); 
    } 

    public void insertQuestion(Datas data) { 


     ContentValues values = new ContentValues(); 
     values.put(COL1, data.getQuestion()); 
     values.put(COL2, data.getOptionA()); 
     values.put(COL3, data.getOptionB()); 
     values.put(COL4, data.getOptionC()); 
     values.put(COL5, data.getAnswer()); 

     this.getWritableDatabase().insert(TABLE_NAME, null, values); 


    } 

    public Cursor getAllData() { 

     String selectQuery = "SELECT * from " + TABLE_NAME; 

     Cursor cursor = this.getWritableDatabase().rawQuery(selectQuery, null); 
     return cursor; 
    } 

,如果你想顯示列表項,然後使用自定義ArrayAdapter的適當佈局

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_questions); 
     try { 
      DBController db = new DBController(getApplicationContext()); 

      db.insertQuestion(new Datas("How to Show Data in ListView through Database?", "A", "B", "C", "123")); 

      int i[] = {android.R.id.text1, android.R.id.text2}; 
      String str[] = {"que", "ans"}; 
      SimpleCursorAdapter sdp = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, db.getAllData(), str, i, 0); 
      ListView lv = (ListView) findViewById(R.id.listView1); 
      lv.setAdapter(sdp); 
     } catch (Exception e) { 
      Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show(); 
     } 

改變你的活動。

相關問題