Сохранение SQLite базы c помощью BackupAgentHelper

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Vitalion
Сообщения: 4
Зарегистрирован: 24 апр 2015, 18:17

Сохранение SQLite базы c помощью BackupAgentHelper

Сообщение Vitalion » 19 дек 2015, 22:27

Я сейчас на испытательном сроке и у меня проблема от которой зависит дальнейшая судба в компании. Помогите.
Есть класс DBHelper

Код: Выделить всё

public  class DBHelper extends SQLiteOpenHelper  {
    GeneralPath generalPath;
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, Constants.DATABASE_FILE_NAME, factory, Constants.DATABASE_VERSION_1);
         generalPath = GeneralPath.getInstance();
         SQLiteDatabase db = getReadableDatabase();
         generalPath.setPath(db.getPath());
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE " + Constants.PERSONS_TABLE_NAME + "(" +
                "" + Constants.TABLE_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "" + Constants.TABLE_COLUMN_FOR_NAME + " TEXT, "+
                "" + Constants.TABLE_COLUMN_FOR_INFO + " TEXT )";
        db.execSQL(query);
        generalPath.setPath(db.getPath());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db = getWritableDatabase();
        db.execSQL("DROP TABLE IF EXISTS " + Constants.PERSONS_TABLE_NAME);
        onCreate(db);
        generalPath.setPath(db.getPath());
    }

    public void addPerson (Person person) {
        ContentValues values = new ContentValues();
        values.put(Constants.TABLE_COLUMN_FOR_NAME, person.getName());
        values.put(Constants.TABLE_COLUMN_FOR_INFO, person.getDescription());
        SQLiteDatabase db = getWritableDatabase();
        db.insert(Constants.PERSONS_TABLE_NAME, null, values);

    }

    public List getPersonsList (){

        List <Person> persons = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        String query = " SELECT * FROM " + Constants.PERSONS_TABLE_NAME;
        Cursor cursor = db.rawQuery(query, null);
        cursor.moveToFirst();

        while (!cursor.isAfterLast()){
            if(cursor.getString(cursor.getColumnIndex(Constants.TABLE_COLUMN_FOR_NAME))!=null){
                Person person = new Person(null, null);
                person.setName(cursor.getString(cursor.getColumnIndex(Constants.TABLE_COLUMN_FOR_NAME)));
                person.setDescription(cursor.getString(cursor.getColumnIndex(Constants.TABLE_COLUMN_FOR_INFO)));
                persons.add(person);
                cursor.moveToNext();

            }
        }

        db.close();
       return persons;
    }

}
Я создаю еще класс для сохранения базы в облаке, но я не знаю как это сделать правильно.

Код: Выделить всё

public class DataBackupAgent extends BackupAgentHelper {
    GeneralPath generalPath;


    @Override
    public void onCreate() {
        super.onCreate();
        generalPath = GeneralPath.getInstance();
        FileBackupHelper dbs = new FileBackupHelper(this, generalPath.getPath()+ Constants.DATABASE_FILE_NAME);
        addHelper("dbs", dbs);
    }

public static void requestBackup(Context context) {
    BackupManager backupManager = new BackupManager(context);
    backupManager.dataChanged();

}
GeneralPath - это Singleton в котором есть String path, я передаю ее в выше описанный - BackupManager. В ошибке выскакивает NullPointerExeption. То есть путь базы не правильный. Что у меня не так в DataBackupAgent?

Вот код SingleTone класса, может я где-то в нем что-то напуталю Раньше никогда не использовал его

Код: Выделить всё

public class GeneralPath {
private String path;

private static GeneralPath ourInstance = new GeneralPath();

public static GeneralPath getInstance() {
    return ourInstance;
}

private GeneralPath() {
    path = "";
}

public String getPath() {
    return path;
}

public void setPath(String path) {
    this.path = path;
}

Ответить