Есть класс 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;
}
Ошибка:
FATAL EXCEPTION: main
Process: com.example.sars2.RecycleList, PID: 7363
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference
generalPath+ Constants.DATABASE_FILE_NAME- уGeneralPathкак-тоtoString()определен? – zRrr Dec 17 '15 at 14:36