Не компилируется по нескольким причинам.
- Во-первых, у MainDataHelper нет конструктора, который принимает / принимает действие. MainDataHelper имеет два конструктора, один из которых не имеет параметров, а другой - 12 параметров. Вы должны использовать один из доступных конструкторов при создании экземпляра объекта MainDataHelper.
например. MainDataHelper myDatabaseHelper = new MainDataHelper();
будет компилироваться.
В MainDataHelper нет метода openDatabase , вам придется либо добавить такой метод, либо убрать строку myDatabaseHelper.openDataBase();
В MainDataHelper отсутствует метод close , вам нужно будет либо добавить такой метод, либо убрать строку myDatabaseHelper.close();
Учитывая, что вы хотите использовать базу данных SQLite, вы будете использовать подкласс класса SQLiteOpenHelper, который будет вызываться из действия или фрагмента (или даже многих из них).
Прежде чем даже подумать о написании строки кода, вам необходимо понять ваши требования к базе данных и иметь какой-то дизайн (схему). Игнорируя это и предполагая (для демонстрации), что вам нужна простая база данных с одной таблицей с именем questions и одним столбцом с именем question, тогда следующим классом может быть такой класс (в данном случае MainDataBaseHelper.java ): -
public class MainDatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASENAME = "question.db"; //<<<<<<<<<< name of the database
public static final int DATABASEVERSION = 1; //<<<<<<<<<< version number of the database
public static final String TABLE_QUESTION = "question"; //<<<<<<<<<< name of the quiz table
public static final String COLUMN_QUESTION_QUESTION = "question";
public MainDatabaseHelper(Context context) {
super(context, DATABASENAME, null, DATABASEVERSION);
}
//<<<<<<<<<< Called ONCE when the database is first created (first time an attempt is made to open if)
@Override
public void onCreate(SQLiteDatabase db) {
String crt_questiontable_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUESTION + "(" +
COLUMN_QUESTION_QUESTION + " TEXT" +
")";
db.execSQL(crt_questiontable_sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public long addQuestion(String question) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_QUESTION_QUESTION,question);
return this.getWritableDatabase().insert(TABLE_QUESTION,null,cv);
}
public Cursor getAllQuestions() {
return this.getWritableDatabase().query(TABLE_QUESTION,null,null,null,null,null,null);
}
}
При наличии вышеупомянутого класса ваш код может быть (в качестве простого примера): -
MainDatabaseHelper myDBHlpr = new MainDatabaseHelper(getActivity()); // Instantiate a MainDatabasehelper object called myDBHlpr
// Add some questions to the questions table
myDBHlpr.addQuestion("This is the first question");
myDBHlpr.addQuestion("This is another question");
myDBHlpr.addQuestion("Yet another question");
// Now get all of the questions
Cursor csr = myDBHlpr.getAllQuestions();
Log.d("DBINFO","There are " + String.valueOf(csr.getCount()) + " questions in the database.");
// Loop through all the questions
while (csr.moveToNext()) {
Log.d("DBINFO",
"Question " +
String.valueOf(csr.getPosition() + 1) +
" is " + csr.getString(csr.getColumnIndex(MainDatabaseHelper.COLUMN_QUESTION_QUESTION))
);
mMostMessagesSent.setText(csr.getString(csr.getColumnIndex(MainDatabaseHelper.COLUMN_QUESTION_QUESTION));
}
csr.close(); //<<<<<<<<<< Should always close Cursor when done with it.
//mMostMessagesSent.setText(text); //<<<<<<<<<< done in the loop through the cursor (for demonstration very likely only the last question will be seen)
mMostMessagesSent.setTextColor(Color.WHITE);
При запуске (в первый раз) журнал будет включать: -
11-12 20:17:16.345 1376-1376/? D/DBINFO: There are 3 questions in the database.
11-12 20:17:16.345 1376-1376/? D/DBINFO: Question 1 is This is the first question
11-12 20:17:16.345 1376-1376/? D/DBINFO: Question 2 is This is another question
11-12 20:17:16.345 1376-1376/? D/DBINFO: Question 3 is Yet another question
Кроме того, последний вопрос (который может быть или не быть последним добавленным вопросом) будет отображаться в TextView.
- Обратите внимание, что 3 строки будут добавлены в таблицу при каждом запуске выше.
- Обратите внимание, что это просто задумано как введение / демонстрация, необходимо сделать гораздо больше, например, создать базу данных.