使用 Singleton 从多个活动访问数据库时无法解析符号 'context'
cannot resolve symbol 'context' when Accessing database from multiple activities using Singleton
我一直在尝试使用 YouTube 上的教程在我的应用程序中使用数据库:https://www.youtube.com/watch?v=T0ClYrJukPA。
但是 运行 遇到了尝试从多个活动访问我的数据库的问题。关于 Stack 的一个问题:How to pass database objects between activities (Android)
让我想到了这个:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html 它似乎可以正常工作,除了主要 "cannot resolve symbol 'context'" 中的错误 activity 我正在尝试在其中使用数据库。任何帮助将不胜感激。
我的主要activity:
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Spinner;
public class Home extends AppCompatActivity {
DatabaseHelper myDb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//create database
myDb = DatabaseHelper.getInstance(context);
我的数据库助手:
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper sInstance;
public static final String DATABASE_NAME = "character_info.db";
public static final String TABLE_NAME = "characters_table";
public static final String COL_1 = "NAME";
public static final String COL_3 = "HEALTH";
public static final String COL_2 = "STRENGTH";
public static final String COL_4 = "ENDURANCE";
public static final String COL_5 = "CARRY_WEIGHT";
public static final String COL_6 = "AGILITY";
public static final String COL_7 = "INTELLIGENCE";
public static final String COL_8 = "CHARISMA";
public static final String COL_9 = "ZPREP";
public static final String COL_10 = "INVENTORY";
public static synchronized DatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String SQL_String = "create table " + TABLE_NAME +" (NAME TEXT PRIMARY KEY, HEALTH TEXT, STRENGTH TEXT" +
", ENDURANCE TEXT, CARRY_WEIGHT TEXT, AGILITY TEXT, INTELLIGENCE TEXT, CHARISMA TEXT, ZPREP TEXT, INVENTORY TEXT)";
db.execSQL(SQL_String);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertData(String name, String health, String strength, String endurance, String carryweight,
String agility, String intelligence, String charisma, String zprep, String inventory) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, name);
contentValues.put(COL_2, health);
contentValues.put(COL_3, strength);
contentValues.put(COL_4, endurance);
contentValues.put(COL_5, carryweight);
contentValues.put(COL_6, agility);
contentValues.put(COL_7, intelligence);
contentValues.put(COL_8, charisma);
contentValues.put(COL_9, zprep);
contentValues.put(COL_10, inventory);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1)
return false;
else
return true;
}
}
改变
myDb = DatabaseHelper.getInstance(context);
到
myDb = DatabaseHelper.getInstance(getApplicationContext());
我一直在尝试使用 YouTube 上的教程在我的应用程序中使用数据库:https://www.youtube.com/watch?v=T0ClYrJukPA。
但是 运行 遇到了尝试从多个活动访问我的数据库的问题。关于 Stack 的一个问题:How to pass database objects between activities (Android)
让我想到了这个:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html 它似乎可以正常工作,除了主要 "cannot resolve symbol 'context'" 中的错误 activity 我正在尝试在其中使用数据库。任何帮助将不胜感激。
我的主要activity:
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Spinner;
public class Home extends AppCompatActivity {
DatabaseHelper myDb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//create database
myDb = DatabaseHelper.getInstance(context);
我的数据库助手:
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper sInstance;
public static final String DATABASE_NAME = "character_info.db";
public static final String TABLE_NAME = "characters_table";
public static final String COL_1 = "NAME";
public static final String COL_3 = "HEALTH";
public static final String COL_2 = "STRENGTH";
public static final String COL_4 = "ENDURANCE";
public static final String COL_5 = "CARRY_WEIGHT";
public static final String COL_6 = "AGILITY";
public static final String COL_7 = "INTELLIGENCE";
public static final String COL_8 = "CHARISMA";
public static final String COL_9 = "ZPREP";
public static final String COL_10 = "INVENTORY";
public static synchronized DatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String SQL_String = "create table " + TABLE_NAME +" (NAME TEXT PRIMARY KEY, HEALTH TEXT, STRENGTH TEXT" +
", ENDURANCE TEXT, CARRY_WEIGHT TEXT, AGILITY TEXT, INTELLIGENCE TEXT, CHARISMA TEXT, ZPREP TEXT, INVENTORY TEXT)";
db.execSQL(SQL_String);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertData(String name, String health, String strength, String endurance, String carryweight,
String agility, String intelligence, String charisma, String zprep, String inventory) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, name);
contentValues.put(COL_2, health);
contentValues.put(COL_3, strength);
contentValues.put(COL_4, endurance);
contentValues.put(COL_5, carryweight);
contentValues.put(COL_6, agility);
contentValues.put(COL_7, intelligence);
contentValues.put(COL_8, charisma);
contentValues.put(COL_9, zprep);
contentValues.put(COL_10, inventory);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1)
return false;
else
return true;
}
}
改变
myDb = DatabaseHelper.getInstance(context);
到
myDb = DatabaseHelper.getInstance(getApplicationContext());