我正在开发一个Android应用程序。在那个应用程序中,我必须不断地从我的数据库中添加和获取数据。
我使用三个单独的线程来执行此操作。我不认为我有一个线程问题,因为我的DDMS我可以监视线程打开但我认为,我没有掌握的是数据库实例。
例如,
我有一个方法,它应该构造一个文件名,该文件名由一个表的单元格中的值组成+" _" +另一个表中单元格的值。所以,我有这个方法调用另外两个方法,每个方法都有一个任务去数据库并获得该值。
问题是我不知道应该如何创建一个实例。你可以看到,对于每个方法,我创建了一个相同数据库的单独实例,然后关闭它。 在这个AsyncTaskRunner类中,我有许多相同的方法,它们正在执行自己的任务,但每次都为同一个数据库打开一个不同的实例名称。
这似乎是非常错误的。我会想到,只要课程打开,我就可以打开数据库的单个实例,然后在Destroy()之前不关闭它,以便所有方法都可以完成它们。
我能做得更好吗?
这是我的代码:
public String evaluateATable(String filenamePrefix){
SQLDatabase getATableData = new SQLDatabase(mContext);
getATableData.open();
String aRowId = SQLDatabase.evalATable(filenamePrefix);
getATableData.close();
if(aRowId != null){
return aRowId;
}
return null;
}
public String evaluateLTable(String filenamePrefix){
SQLDatabase getLtabledata = new SQLDatabase(mContext);
getLtabledata.open();
String lRowId = SQLDatabase.evalLTable(filenamePrefix);
getLtabledata.close();
if(lRowId != null){
return lRowId;
}
return null;
}
答案 0 :(得分:1)
你可以做一件事,你必须声明SQL数据库并创建一次它的实例,然后在所有方法中使用它
就像下面的
Public class test extends Activity {
SQLDatabase getATableData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLDatabase getATableData = new SQLDatabase(this);
}
public String evaluateATable(String filenamePrefix){
getATableData.open();
String aRowId = SQLDatabase.evalATable(filenamePrefix);
getATableData.close();
if(aRowId != null){
return aRowId;
}
return null;
}
public String evaluateLTable(String filenamePrefix){
getLtabledata.open();
String lRowId = SQLDatabase.evalLTable(filenamePrefix);
getLtabledata.close();
if(lRowId != null){
return lRowId;
}
return null;
}