存储在sd卡中的Android数据

存储在sd卡中的Android数据,android,android-sqlite,android-sdcard,Android,Android Sqlite,Android Sdcard,我已经创建了数据库,它存储在sd卡中。但似乎发生了什么事。 下面是创建数据库的代码 public void createDatabase(){ String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/smsgarbage.db"; sqlite = openOrCreateDatabase(path, MODE_PRIVATE, null); try { St

我已经创建了数据库,它存储在sd卡中。但似乎发生了什么事。 下面是创建数据库的代码

public void createDatabase(){
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/smsgarbage.db";
    sqlite = openOrCreateDatabase(path, MODE_PRIVATE, null);
    try {
        String query = "CREATE TABLE tblGarbage(id text PRIMARY KEY, prefixNum text)";
        sqlite.execSQL(query);
        Toast.makeText(MainActivity.this, "Oncreate dabase was created", Toast.LENGTH_LONG).show();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
在清单文件中,我已填写:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


有人谁是关于这个问题的大师,请花时间再次检查,以支持我。非常感谢。

您好,如果您想通过SD卡创建数据库,请参阅下面的方法。如果您有任何疑问,请告诉我,如果您在任何时候都没有收到我的信息

第一步。扩展
SQLiteOpenHelper
将数据库名称替换为完整的sd卡路径。这将在定义位置上创建数据库

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;


import com.adb.test.sql.DAO.FoodMarchantDAO;


public class SQLite extends SQLiteOpenHelper {

    public static int DATABASE_VERSION = 1;

    public static String DATABASE_NAME = "smsgarbage.db";

    private static final String DATABASE_PATH_NAME = getDBAbsolutePath();

    /**
     * Create a helper object to create, open, and/or manage a database. This method always returns very quickly. 
     * The database is not actually created or opened until one of getWritableDatabase()
     * or getReadableDatabase() is called.
     * @param context
     * @param name
     * @param factory
     * @param version
     */
    public SQLite(Context context) 
    {
        super(context, DATABASE_PATH_NAME, null, version);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // when we call SQLiteDatabase getWritableDatabase() this would called
        // In fist time application install if no database then it would called once but that time Application 
        // database might be null we have to used here db
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
    }

    private static String getDBAbsolutePath() {
        return new StringBuilder().append(appHomeDirectory()).append(DATABASE_NAME).toString();
    }

    public static String appHomeDirectory() {
        return new StringBuilder().append(getExternalStoragePath()).append("foodbazer").append("/").toString();
    }
}
第二步。在应用程序级别,如何访问SQLite帮助类,请参见以下内容

import com.adb.test.sql.data.SQLite;
import android.app.Application;
import android.database.sqlite.SQLiteDatabase;


public class FoodBazerApplication extends Application{

    private static FoodBazerApplication mFoodBazerApplication;

    public SQLiteDatabase mAppLevelDB;

    public static FoodBazerApplication getInstance()
    {
        return mFoodBazerApplication;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mFoodBazerApplication = this;
        SQLite tmpSQL= new SQLite(getApplicationContext());
        // it return null if first time database create onCreate() called,
        // once database create it will open the database so openDataBase() called
        mAppLevelDB = tmpSQL.getWritableDatabase();
    }
}

发生了错误
。。。发布错误日志。那么就只能找到问题了。出了什么问题?