我有一个活动,其中包含用于控制数据库的所有功能,并且我希望所有其他活动在与数据库进行交互时都可以使用这些功能。以下是我的问题的一个示例。
时钟脚本:
public class Clock extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clock);
Data.createTable(); //<<<
}
//...
}
数据脚本:
public class Data extends Activity
{
SQLiteDatabase mydb;
private static String DBNAME = "SHIFTS.db";
private static String TABLE = "MY_SHIFTS";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
}
public void createTable() //<<<
{
try
{
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
mydb.execSQL("CREATE TABLE IF NOT EXISTS "+ TABLE +" (ID INTEGER PRIMARY KEY, STARTDATE TEXT, ENDDATE TEXT, LENGTH INTEGER, TYPE INTEGER);");
mydb.close();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "Error in creating table", Toast.LENGTH_LONG).show();
}
}
// ... lots more functions
}
错误信息:
无法从数据类型对非静态方法createTable()进行静态引用。
当我尝试使方法静态化时,只会引起更多问题。
另外,如果我尝试Data data = new Data(); data.createTable(); 我得到了NullPointerException。
这里有什么问题?
将static关键字添加到共享方法中
public static void createTable()
然后使用:
Data.createTable();
在另一个类/片段/活动中的某个位置。
我这样做,并且有效。
好吧,我的“数据”是一个普通的类,不是一个活动,但是我也有一个活动,它以相同的方式共享方法。
这是我的dbTableCreate方法:
// Create the database table if it doesn't exist
protected final static void dbTableCreate(final Context ctx)
{
SQLiteDatabase db = null;
try
{
db = ctx.openOrCreateDatabase(DB_NAME, Context.MODE_PRIVATE, null);
db.execSQL
(
"CREATE TABLE IF NOT EXISTS " + DB_TABLE +
" (date DATETIME PRIMARY KEY NOT NULL DEFAULT (CURRENT_DATE), " +
"score INTEGER DEFAULT (null));"
);
}
catch (final SQLiteException se)
{
System.out.println
(
ctx.getClass().getSimpleName() + "\n" +
"Could not create the database"
);
se.printStackTrace();
}
finally
{
db.close();
}
}
我这样称呼它:
Context ctx = getApplicationContext();
CLS_DB.dbTableCreate(ctx);
我班和你班的主要区别是我的课程被声明为
public final class CLS_DB
{
/* ----------------------------- Constants ------------------------------ */
private final static String DB_NAME = "pat.db";
private final static String DB_TABLE = "tests";
/* ------------------------------ Methods ------------------------------- */
而不是作为活动。
我没有初始化Class,它没有构造函数。
它只是共享方法的一个容器(不是,用于执行我的代码中其他地方都没有的操作)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句