Он не компилируется, и я понятия не имею, почему ... Новичок в sqlite и пытался следить за ответом на какой-то вопрос о переполнении стека, но не смог его понять. Модальный класс - MainDataHelper
Код
MainDataHelper myDatabaseHelper = new MainDataHelper(getActivity());
myDatabaseHelper.openDataBase();
String text = myDatabaseHelper.getMostMessagesSent(); //this is the method to query
myDatabaseHelper.close();
mMostMessagesSent.setText(text);
mMostMessagesSent.setTextColor(Color.WHITE);
Помощник
public class MainDataHelper extends Activity {
private int TotalMessagesSent;
private int TotalMessagesRecieved;
private int TotalMessages;
private String TotalTimeSpent;
private String MostMessagesSent;
private String MostMessagesRecieved;
private String MostTexted;
private String MostTimeSpent;
private int QuizTaken;
private int QuizTakers;
private int Reviewed;
private int Reviews;
public MainDataHelper() {
TotalMessagesSent = 0;
TotalMessagesRecieved = 0;
TotalMessages = 0;
TotalTimeSpent = "";
MostMessagesSent = "";
MostMessagesRecieved = "";
MostTexted = "";
MostTimeSpent = "";
QuizTaken = 0;
QuizTakers = 0;
Reviewed = 0;
Reviews = 0;
}
public MainDataHelper( int TotalMessagesSent, int TotalMessagesRecieved, int TotalMessages, String TotalTimeSpent,String MostMessagesSent, String MostMessagesRecieved, String MostTexted, String MostTimeSpent,int QuizTaken, int QuizTakers, int Reviewed, int Reviews) {
TotalMessagesSent = TotalMessagesSent;
TotalMessagesRecieved = TotalMessagesRecieved;
TotalMessages = TotalMessages;
TotalTimeSpent = TotalTimeSpent;
MostMessagesSent = MostMessagesSent;
MostMessagesRecieved = MostMessagesRecieved;
MostTexted = MostTexted;
MostTimeSpent = MostTimeSpent;
QuizTaken = QuizTaken;
QuizTakers = QuizTakers;
Reviewed = Reviewed;
Reviews = Reviews;
}
public int getTotalMessagesSent() {
return TotalMessagesSent;
}
public int getTotalMessagesRecieved() {
return TotalMessagesRecieved;
}
public int getTotalMessages() {
return TotalMessages;
}
public String getTotalTimeSpent() {
return TotalTimeSpent;
}
public String getMostMessagesSent() {
return MostMessagesSent;
}
public String getMostMessagesRecieved() {
return MostMessagesRecieved;
}
public String getMostTexted() {
return MostTexted;
}
public String getMostTimeSpent() {
return MostTimeSpent;
}
public int getQuizTaken() {
return QuizTaken;
}
public int getQuizTakers() {
return QuizTakers;
}
public int getReviewed() {
return Reviewed;
}
public int getReviews() {
return Reviews;
}
public void setTotalMessagesSent(int TotalMessagesSent) {
TotalMessagesSent = TotalMessagesSent;
}
public void setTotalMessagesRecieved(int TotalMessagesRecieved) {
TotalMessagesRecieved = TotalMessagesRecieved;
}
public void setTotalMessages(int TotalMessages) {
TotalMessages = TotalMessages;
}
public void setTotalTimeSpent(String TotalTimeSpent) { TotalTimeSpent = TotalTimeSpent; }
public void setMostMessagesSent(String MostMessagesSent) {
MostMessagesSent = MostMessagesSent;
}
public void setMostMessagesRecieved(String MostMessagesRecieved) {
MostMessagesRecieved = MostMessagesRecieved;
}
public void setMostTexted(String MostTexted) {
MostTexted = MostTexted;
}
public void setMostTimeSpent(String MostTimeSpent) { MostTimeSpent = MostTimeSpent; }
public void setQuizTaken(int QuizTaken) {
QuizTaken = QuizTaken;
}
public void setQuizTakers(int QuizTakers) {
QuizTakers = QuizTakers;
}
public void setReviewed(int Reviewed) { Reviewed = Reviewed; }
public void setReviews(int Reviews) {
Reviews = Reviews;
}
}
.................................................. .................................................. .................................................. .................................................. ..............
Не могли бы вы опубликовать свой класс datahelper?
посмотрите отредактированный вопрос @Skemelio
Это действие, которое вы назвали MainDataHelper. Ничего общего с базами данных SQLite. Помощник базы данных должен расширять класс DatabaseHelper. Прочтите это руководство -> developer.android.com/training/data-storage/…
На вашем рисунке часть getActivity() подчеркнута красным. Попробуйте передать UsageSettings.this.
Но как насчет .openDataBase
Не могли бы вы решить мою проблему, пожалуйста, @Ishaan
Мне очень жаль, Акаш. Я не часто использую базы данных SQLite. Я только что заметил подчеркнутый красным код и указал на это. Я больше не смогу вам помочь.




Он не компилируется по нескольким причинам.
например MainDataHelper myDatabaseHelper = new MainDataHelper(); компилирует.
В MainDataHelper нет метода openDatabase, вам придется либо добавить такой метод, либо удалить строку myDatabaseHelper.openDataBase();
В MainDataHelper нет метода близко, вам придется либо добавить такой метод, либо удалить строку myDatabaseHelper.close();
Учитывая, что вы хотите использовать базу данных SQLite, вы будете использовать подкласс класса SQLiteOpenHelper, который будет вызываться из Activity или Fragment (или даже из многих из них).
Прежде чем даже подумать о написании строчки кода, вам нужно понять свои требования к базе данных и иметь какой-то дизайн (схему). Игнорируя это и предполагая (для демонстрации), что вам нужна простая база данных с одной таблицей с именем вопросы и одним столбцом с именем 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.
общедоступный статический курсор getAllQuestions (активность FragmentActivity) {вернуть this.getWritableDatabase (). query (TABLE_NAME, null, null, null, n ull, null, null); }
Я скопировал ваш метод getAllQuestions, но в действии Cursor csr = MainData.getAllQuestions (); Эта lina попросила меня сделать его statis, говоря, что на него нельзя ссылаться из контекста статистики
но если я изменю его на статический, я получаю строку с ошибкой под this.getWrttableDatabase (), говоря, что он не должен быть статическим
Вы НЕ МОЖЕТЕ просто скопировать этот метод. Вам НУЖЕН новый класс, являющийся подклассом SQLIteOpenHelper.
у меня просто не было этого метода, чтобы получить все данные
Проверьте класс MainDataHelper. Вероятно, у него нет конструктора, который принимает Activity / Context. И, вероятно, у него также нет методов openDataBase () и close ().