У меня есть приложение, в котором я могу добавлять экзамены, уроки и т. Д. c. Я сохраняю эти данные в SQLite, но теперь мне нужно реализовать Firebase. Сохранить данные в firebase легко, я могу запрограммировать его в той же функции, где я сохраняю данные в SQLite, проблема в том, что если пользователь удаляет приложение, база данных SQLite удаляется, и я читаю все свои данные из SQLite. Итак, мне нужно прочитать данные из firebase и сохранить их в SQlite, если данных SQLite нет.
My SQLiteOpenHelper
public class DBOpenHelper extends SQLiteOpenHelper {
//CREATE Y DROP DE EVENTOS
private static final String CREATE_EVENTS_TABLE = "create table "+DbStructure.EVENT_TABLE_NAME+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+DbStructure.EVENT+" TEXT, "+DbStructure.TIME+" TEXT, "+DbStructure.DATE+" TEXT, "+DbStructure.MONTH+" TEXT, "
+DbStructure.YEAR+" TEXT, "+DbStructure.Notify+" TEXT)";
private static final String DROP_EVENTS_TABLE= "DROP TABLE IF EXISTS "+DbStructure.EVENT_TABLE_NAME;
//CREATE Y DROP DE PERIODO
private static final String CREATE_PERIOD_TABLE = "create table " +DbStructure.PERIOD_TABLE_NAME+"(IDPERIOD INTEGER PRIMARY KEY AUTOINCREMENT, "+DbStructure.START_DATE + " TEXT, "
+ DbStructure.FINISH_DATE +" TEXT)";
private static final String DROP_PERIOD_TABLE= "DROP TABLE IF EXISTS "+DbStructure.PERIOD_TABLE_NAME;
//CREATE Y DROP DE RECORDATORIOS
private static final String CREATE_REMINDER_TABLE = "create table " + DbStructure.REMINDER_TABLE_NAME + "(" + DbStructure.REC_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, " + DbStructure.REC_TITLE + " TEXT, "
+ DbStructure.REC_BODY + " TEXT, " + DbStructure.REC_TIME + " TEXT)";
private static final String DROP_REC_TABLE= "DROP TABLE IF EXISTS " + DbStructure.REMINDER_TABLE_NAME;
//CREATE Y DROP DE CLASES
private static final String CREATE_CLASS_TABLE = "create table " + DbStructure.CLASS_TABLE_NAME + "(" + DbStructure.CLASS_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + DbStructure.CLASS_NAME + " TEXT, "
+ DbStructure.CLASS_TUTOR + " TEXT)";
private static final String DROP_CLASS_TABLE = "DROP TABLE IF EXISTS " + DbStructure.CLASS_TABLE_NAME;
//CREATE Y DROP DE EXAMENES
private static final String CREATE_EXAM_TABLE = "create table " + DbStructure.EXAM_TABLE_NAME + "(" + DbStructure.EXAM_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + DbStructure.EXAM_DESCRIPTION
+ " TEXT, " + DbStructure.EXAM_NOTA + " TEXT, " + DbStructure.EXAM_FECHA + " TEXT, " + DbStructure.EXAM_CLASS_ID + " INTEGER)";
private static final String DROP_EXAM_TABLE = "DROP TABLE IF EXISTS " + DbStructure.EXAM_TABLE_NAME;
public DBOpenHelper(@Nullable Context context) {
super(context, DbStructure.DB_NAME, null, DbStructure.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_EVENTS_TABLE);
db.execSQL(CREATE_PERIOD_TABLE);
db.execSQL(CREATE_REMINDER_TABLE);
db.execSQL(CREATE_CLASS_TABLE);
db.execSQL(CREATE_EXAM_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_EVENTS_TABLE);
db.execSQL(DROP_PERIOD_TABLE);
db.execSQL(DROP_REC_TABLE);
db.execSQL(DROP_CLASS_TABLE);
db.execSQL(DROP_EXAM_TABLE);
onCreate(db);
}
//SAVE,READ,DELETE Y UPDATE DE EXAMES
public void SaveExam (String descripcion,String nota,String fecha,int classid,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.EXAM_DESCRIPTION,descripcion);
contentValues.put(DbStructure.EXAM_NOTA,nota);
contentValues.put(DbStructure.EXAM_FECHA,fecha);
contentValues.put(DbStructure.EXAM_CLASS_ID,classid);
database.insert(DbStructure.EXAM_TABLE_NAME,null,contentValues);
}
public Cursor ReadExams (int idclase,SQLiteDatabase database){
String selection = DbStructure.EXAM_CLASS_ID+ "=?";
String [] selectionArgs = {String.valueOf(idclase)};
String [] Projections = {DbStructure.EXAM_ID,DbStructure.EXAM_DESCRIPTION,DbStructure.EXAM_NOTA,DbStructure.EXAM_FECHA};
return database.query(DbStructure.EXAM_TABLE_NAME,Projections,selection,selectionArgs,null,null,null);
}
public void deleteSingleExam(int id,SQLiteDatabase database){
String selection = DbStructure.EXAM_ID+"=?";
String [] selectionArgs = {String.valueOf(id)};
database.delete(DbStructure.EXAM_TABLE_NAME,selection,selectionArgs);
}
public void updateExam(int id,String nom,String nota,String fecha,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.EXAM_DESCRIPTION,nom);
contentValues.put(DbStructure.EXAM_NOTA,nota);
contentValues.put(DbStructure.EXAM_FECHA,fecha);
String selection = DbStructure.EXAM_ID+"=?";
String [] selectionArgs = {String.valueOf(id)};
database.update(DbStructure.EXAM_TABLE_NAME,contentValues,selection,selectionArgs);
}
public void deleteAllExams(int idClass,SQLiteDatabase database){
String selection = DbStructure.EXAM_CLASS_ID+"=?";
String [] selectionArgs = {String.valueOf(idClass)};
database.delete(DbStructure.EXAM_TABLE_NAME,selection,selectionArgs);
}
//SAVE,READ,DELETE Y UPDATE DE CLASES
public void SaveClass (String nom,String tutor,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.CLASS_NAME,nom);
contentValues.put(DbStructure.CLASS_TUTOR,tutor);
database.insert(DbStructure.CLASS_TABLE_NAME,null,contentValues);
}
public void deleteClass (int id , SQLiteDatabase database){
deleteAllExams(id,database);
String selection = DbStructure.CLASS_ID+"=?";
String [] selectionArg ={String.valueOf(id)};
database.delete(DbStructure.CLASS_TABLE_NAME,selection,selectionArg);
}
public void updateClass(int id,String nom,String tutor,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.CLASS_NAME,nom);
contentValues.put(DbStructure.CLASS_TUTOR,tutor);
String selection = DbStructure.CLASS_ID + "=?";
String [] SelectionArgs = {String.valueOf(id)};
database.update(DbStructure.CLASS_TABLE_NAME,contentValues,selection,SelectionArgs);
}
public Cursor ReadClass(SQLiteDatabase database){
String [] Projections = {DbStructure.CLASS_ID,DbStructure.CLASS_NAME,DbStructure.CLASS_TUTOR};
return database.query(DbStructure.CLASS_TABLE_NAME,Projections,null,null,null,null,null);
}
//READ Y SAVE PERIOD
public void SavePeriod (String fecInico,String fecFinal,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.START_DATE,fecInico);
contentValues.put(DbStructure.FINISH_DATE,fecFinal);
database.insert(DbStructure.PERIOD_TABLE_NAME,null,contentValues);
}
public Cursor ReadPeriod(SQLiteDatabase database){
String [] Projections = {"IDPERIOD",DbStructure.START_DATE,DbStructure.FINISH_DATE};
return database.query(DbStructure.PERIOD_TABLE_NAME,Projections,null,null,null,null,null);
}
public void updatePeriod(int id,String fecInico,String fecFinal,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.START_DATE,fecInico);
contentValues.put(DbStructure.FINISH_DATE,fecFinal);
String selection = "IDPERIOD=?";
String [] selectionArgs = {String.valueOf(id)};
database.update(DbStructure.PERIOD_TABLE_NAME,contentValues,selection,selectionArgs);
}
//SAVE,DELETE,UPDATE,READ DE RECORDATORIOS
public void SaveReminder(String titulo,String cuerpo,String hora,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.REC_TITLE,titulo);
contentValues.put(DbStructure.REC_BODY,cuerpo);
contentValues.put(DbStructure.REC_TIME,hora);
database.insert(DbStructure.REMINDER_TABLE_NAME,null,contentValues);
}
public Cursor ReadReminder(SQLiteDatabase database){
String [] Projections = {DbStructure.REC_ID,DbStructure.REC_TITLE,DbStructure.REC_BODY,DbStructure.REC_TIME};
return database.query(DbStructure.REMINDER_TABLE_NAME,Projections,null,null,null,null,null);
}
public void deleteReminder(int id,SQLiteDatabase database){
String selection = DbStructure.REC_ID+"=?";
String [] selectionArg ={String.valueOf(id)};
database.delete(DbStructure.REMINDER_TABLE_NAME,selection,selectionArg);
}
public void updateReminder(int id ,String titulo,String cuerpo,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.REC_TITLE,titulo);
contentValues.put(DbStructure.REC_BODY,cuerpo);
String selection = DbStructure.REC_ID+"=?";
String [] SelectionArgs = {String.valueOf(id)};
database.update(DbStructure.REMINDER_TABLE_NAME,contentValues,selection,SelectionArgs);
}
//SAVE,DELETE,READ Y UPDATE DE EVENTOS
public void SaveEvent(String event,String time,String date,String month,String year,String notify,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.EVENT,event);
contentValues.put(DbStructure.TIME,time);
contentValues.put(DbStructure.DATE,date);
contentValues.put(DbStructure.MONTH,month);
contentValues.put(DbStructure.YEAR,year);
contentValues.put(DbStructure.Notify,notify);
database.insert(DbStructure.EVENT_TABLE_NAME,null,contentValues);
}
public void deleteEvent(String event,String date,String time,SQLiteDatabase database){
String selection = DbStructure.EVENT+"=? and "+DbStructure.DATE+"=? and "+DbStructure.TIME+"=?";
String[] selectionArg = {event,date,time};
database.delete(DbStructure.EVENT_TABLE_NAME,selection,selectionArg);
}
public void updateEvent(String date,String event, String time,String notify,SQLiteDatabase database){
ContentValues contentValues = new ContentValues();
contentValues.put(DbStructure.Notify,notify);
String Selection = DbStructure.DATE +"=? and "+DbStructure.EVENT+"=? and "+DbStructure.TIME+"=?";
String [] SelectionArgs = {date,event,time};
database.update(DbStructure.EVENT_TABLE_NAME,contentValues,Selection,SelectionArgs);
}
public Cursor ReadEventsperMonth(String month,String year,SQLiteDatabase database){
String [] Projections = {DbStructure.EVENT,DbStructure.TIME,DbStructure.DATE,DbStructure.MONTH,DbStructure.YEAR};
String Selection = DbStructure.MONTH +"=? and "+DbStructure.YEAR+"=?";
String [] SelectionArgs = {month,year};
return database.query(DbStructure.EVENT_TABLE_NAME,Projections,Selection,SelectionArgs,null,null,null);
}
public Cursor ReadEvents(String date,SQLiteDatabase database){
String [] Projections = {DbStructure.EVENT,DbStructure.TIME,DbStructure.DATE,DbStructure.MONTH,DbStructure.YEAR};
String Selection = DbStructure.DATE +"=?";
String [] SelectionArgs = {date};
return database.query(DbStructure.EVENT_TABLE_NAME,Projections,Selection,SelectionArgs,null,null,null);
}
public Cursor ReadIDEvents(String date,String event, String time,SQLiteDatabase database){
String [] Projections = {DbStructure.ID,DbStructure.Notify,DbStructure.TIME};
String Selection = DbStructure.DATE +"=? and "+DbStructure.EVENT+"=? and "+DbStructure.TIME+"=?";
String [] SelectionArgs = {date,event,time};
return database.query(DbStructure.EVENT_TABLE_NAME,Projections,Selection,SelectionArgs,null,null,null);
}
}
Вот где я есть все функции, которые сохраняют данные в SQLite.
Это мои FragmentLessons
public class ClasesFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public static View v;
public static Button btAdd;
public static RecyclerView rvClases;
EditText etNombre, etTutor;
Button btnRegistrar;
Button btPrueba;
Dialog alerta;
public static DBOpenHelper dbOpenHelper;
public static Context context;
public ClasesFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment ClasesFragment.
*/
// TODO: Rename and change types and number of parameters
public static ClasesFragment newInstance(String param1, String param2) {
ClasesFragment fragment = new ClasesFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_clases, container, false);
rvClases = (RecyclerView) v.findViewById(R.id.recyclerview);
btAdd = (Button) v.findViewById(R.id.btadd);
context = getContext();
refreshRecyclerClass();
btAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater1 = getLayoutInflater();
final View dialog = inflater1.inflate(R.layout.dialog,null);
final AlertDialog.Builder builderdialog = new AlertDialog.Builder(getActivity());
builderdialog.setView(dialog);
etNombre = (EditText) dialog.findViewById(R.id.etNombre);
etTutor = (EditText) dialog.findViewById(R.id.etTutor);
btnRegistrar = (Button) dialog.findViewById(R.id.btnRegistrar);
btnRegistrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveClassX(etNombre.getText().toString(),etTutor.getText().toString());
refreshRecyclerClass();
alerta.dismiss();
}
});
alerta = builderdialog.show();
}
});
return v;
}
public void refreshRecyclerClass(){
getClasslist();
rvClases = (RecyclerView) v.findViewById(R.id.recyclerview);
RecyclerClases adap = new RecyclerClases(MainActivity.listaclases,getContext());
rvClases.setLayoutManager(new LinearLayoutManager(getActivity()));
rvClases.setAdapter(adap);
}
private void saveClassX(String nom,String tutor){
dbOpenHelper = new DBOpenHelper(context);
SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
dbOpenHelper.SaveClass(nom,tutor,database);
dbOpenHelper.close();
}
public static void getClasslist(){
MainActivity.listaclases.clear();
dbOpenHelper = new DBOpenHelper(context);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor c = dbOpenHelper.ReadClass(db);
while (c.moveToNext()){
int id = c.getInt(c.getColumnIndex(DbStructure.CLASS_ID));
String nom = c.getString(c.getColumnIndex(DbStructure.CLASS_NAME));
String tutor = c.getString(c.getColumnIndex(DbStructure.CLASS_TUTOR));
Clase clase = new Clase(id,nom,tutor);
MainActivity.listaclases.add(clase);
}
c.close();
dbOpenHelper.close();
}
}
Как вы видите, функция saveClassX вызывает функцию saveClass из Класс SQLiteOpenHelper, здесь я сохраняю данные.
И функция getClassList - это функция, которая считывает данные из Sqlite, вызывая также функцию ReadClass из SQliteOpenhelper. По сути, все мое приложение работает так
Итак, проблема в том, что если пользователь добавляет данные, мне нужно сохранить их в SQLite и в Firebase, но если пользователь удаляет приложение, SQlite db удаляется, даже если есть данные в firebase, и я прочитал свои данные из SQLite, поэтому у меня нет данных.
КАК ПЕРЕМЕСТИТЬ ВСЕ ДАННЫЕ ИЗ FIREBASE В SQLITE, ЕСЛИ БАЗА ДАННЫХ SQLITE НЕ СУЩЕСТВУЕТ?