2016-03-04 2 views
-1

У меня возникли проблемы с созданием базы данных и представлением данных в виде списка, и я совершенно не понимаю основные понятия.List View не отображает данные из базы данных Android

ListView, который я закодировал, ничего не отображает.

DataBase Вспомогательный класс (класс, который создает и управляет базой данных):

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; 
} 

Курсор Positioning был вопрос.

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; 
    } 

и изменить свою активность с

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(); 
     } 

Если вы хотите показать Правильное расположение элемента списка затем использовать пользовательские ArrayAdapter.

Смежные вопросы