现在我希望我的两个活动可以访问相同的数据库。我有一个主要活动和第二个活动..主要活动在数据库中插入一些值,并在主活动启动第二个活动后,第二个应该调用相同的数据库并读取表,并应该返回列表..在我的情况下它的无效主活动成功将值插入数据库,但第二个活动无法返回值。它总是返回空列表...请帮助我......这是访问数据库的第二个活动的编码......
public class SecondActivty extends Activity
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen);
List<String> objlist=new ArrayList<String>();
objlist=objdatabase.getdetail(accessCode);
if(objlist.size()!=0)
{
Toast.makeText(this,"got values", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this,"no value", Toast.LENGTH_LONG).show();
}
}
}
public List<String> getdetail(String code)
{
List<String> objDetail=new ArrayList<String>();
Cursor cGetDetail=objDB.rawQuery("SELECT TITLE,LOCATION,DATE FROM HISTORY WHERE CODE='"+Code+"'", null);
if(cGetDetail.getCount()>0)
{
if(cGetDetail.moveToFirst())
{
String sTitle = cGetDetail.getString(cGetDetail.getColumnIndex("TITLE"));
String sLocation = cGetDetail.getString(cGetDetail.getColumnIndex("LOCATION"));
String sDate=cGetDetail.getString(cGetDetail.getColumnIndex("DATE"));
objDetail.add(new String(String.valueOf(sTitle)));
objDetail.add(new String(String.valueOf(sLocation)));
objDetail.add(new String(String.valueOf(sDate)));
}
}
return objDetail;
public DB extends SQLiteOpenHelper
{
public DB(Context context) {
super(context, DB_NAME, null, 1);
objContext = context;
try {
createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
openDataBase();
}
private boolean checkDataBase(){
//SQLiteDatabase checkDB = null;
boolean checkDB = false;
try
{
String sMyPath = DB_PATH + DB_NAME;
//checkDB = SQLiteDatabase.openDatabase(sMyPath, null, SQLiteDatabase.OPEN_READONLY);
File dbfile = new File(sMyPath);
checkDB = dbfile.exists();
}
catch(SQLiteException e)
{
}
return checkDB;
}
public void createDataBase() throws IOException{
boolean bDatabaseExist = checkDataBase();
if(bDatabaseExist)
{
//do nothing - database already exist
}
else
{
this.getReadableDatabase();
try
{
copyDataBase();
}
catch (IOException e)
{
throw new Error("Error copying database");
}
}
}
private void copyDataBase() throws IOException{
try
{
//Open your local db as the input stream
InputStream objMyInput = objContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String sOutFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream objMyOutput = new FileOutputStream(sOutFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int nLength;
while ((nLength = objMyInput.read(buffer))>0)
{
objMyOutput.write(buffer, 0, nLength);
}
//Close the streams
objMyOutput.flush();
objMyOutput.close();
objMyInput.close();
}
catch(Exception e)
{
Toast.makeText(objContext, "Copy Error-"+e.toString(), Toast.LENGTH_LONG).show();
}
}
public void openDataBase() throws SQLException{
//Open the database
String sMyPath = DB_PATH + DB_NAME;
objDatabase = SQLiteDatabase.openDatabase(sMyPath, null, SQLiteDatabase.OPEN_READWRITE);
}
}
答案 0 :(得分:0)
首先,当您使用First Activity
完成数据库时,需要关闭数据库objdatabase.close();
然后在你的第二个活动中,你需要实现DBHelper和 打开你的数据库,然后调用objdatabase.getdetail(accessCode);不要忘记再次关闭它
答案 1 :(得分:0)
您的数据访问代码应位于单独的“数据访问者”类中,而不应位于活动中。数据访问代码应负责打开和关闭数据库连接。这意味着您可以将数据访问代码保持独立和清洁,并且可以从任何活动中调用它。这是一个很好的指向教程的链接,该教程解释了如何构建数据访问类Vogella data access