数据库文件在android实际设备中不起作用

时间:2013-02-17 12:32:45

标签: android

我是android的初学者。我已经开发了一个测验应用程序。我创建的数据库在模拟器中工作正常,在这个网站上搜索后,我知道它存储在数据/包名称/数据库位置。 当我连接设备并将其用作模拟器时,它不访问数据库。它显示一个空数据库。我搜索了网站,发现从高度评价的问题将数据库文件移动到设备的SD卡,所以我使用了以下代码:

public class DatabaseFile extends SQLiteOpenHelper {

    public static final String DATABASE_NAME="Quiz.db";
    public static final String QUES="ques";
    public static final String OP1="op1";
    public static final String OP2="op2";
    public static final String OP3="op3";
    public static final String ANS="ans";
    public static final String NAME="name";
    public static final String CANS="cans";
    public static final String SCORE="score";

    public DatabaseFile(Context context)
    {
            super(context, DATABASE_NAME, null, 1);
            try {
                File sd = Environment.getExternalStorageDirectory();
                File data = Environment.getDataDirectory();

                if (sd.canWrite()) {
                     String currentDBPath ="/data/com.example.quizproject.StartQuiz/databases/Quiz.db";
                     String backupDBPath = "/backup/"+"Quiz.db";
                     File currentDB = new File(data, currentDBPath);
                     File backupDB = new File(sd, backupDBPath);

                     if (currentDB.exists()) {
                         FileChannel src = new   FileInputStream(currentDB).getChannel();
                         FileChannel dst = new FileOutputStream(backupDB).getChannel();
                         dst.transferFrom(src, 0, src.size());
                         src.close();
                         dst.close();
                     } else {
                         String TAG = null;
                        Log.e(TAG, "File does not exist: " + currentDBPath);
                     }
                }

             } catch (Exception e) {

                 Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();


             }
    }

    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL("CREATE TABLE quiztable (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "ques TEXT, op1 TEXT, op2 TEXT, op3 TEXT, ans TEXT);");

    }

    private Context getBaseContext() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }


}

我还在清单文件中添加了写入sdcard的权限。上面的代码对我不起作用。它仍然显示一个空数据库,并且也没有在sdcard中创建数据库的副本。 作为附加信息,我使用

访问模拟器中的数据库
DatabaseFile dbfile;
SQLiteDatabase sqldb;
dbfile=new DatabaseFile(this);
sqldb=dbfile.getWritableDatabase();

当我将应用程序连接到真实设备时代码保持不变????我连接的设备是galaxy y。

plzzz帮助我.....我在各处搜索bt无法找到任何解决方案哪里出错?为什么数据库文件没有转移到SD卡?

1 个答案:

答案 0 :(得分:0)

您无需在SD卡上复制数据库。它在设备上也可以正常工作。

从您的设备卸载该应用程序。清除所有数据。

从资产文件夹中删除数据库并再次复制。

如果不起作用。更改数据库名称并再次复制。