-1

我是android的初学者。我开发了一个测验应用程序。我创建的数据库在模拟器中运行良好,在此站点上搜索后,我知道它存储在数据/包名称/数据库位置。当我连接设备并将其用作模拟器时,它不会访问数据库。它显示一个空数据库。我搜索了该站点,并从评价很高的问题中找到了将数据库文件移动到设备的 sdcard 的问题,因此我使用了以下代码:

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找不到任何解决方案哪里出错了???为什么数据库文件没有传输到 sdcard?

4

1 回答 1

0

您不需要在您的 SD 卡上复制数据库。它在设备上也能正常工作。

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

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

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

于 2013-02-17T12:51:32.177 回答