Я устанавливаю метод в своем коде приложения, чтобы получить список элементов из локальной базы данных sqlite и использовать его для заполнения определенного узла в базе данных firebased.
Я использую цикл for для полученияэлемент за раз из курсора и отправить его в базу данных firebased.
Моя проблема в том, что код успешно отправляет только первый элемент и отказывается отправлять оставшиеся элементы.
Мой код каксм. ниже.
private void AddData(){
Cursor cursorAddData = myDB.queryStaffList(new String[]{SERIAL_NO_COLUMN, EMAIL_COLUMN, TOKEN_COLUMN,}, null, null);
Log.i(TAG+ " addDataCheck", "no of data: "+cursorAddData.getCount());
if(cursorAddData.moveToFirst()){
for(int i=0; i<cursorAddData.getCount(); i++){
FirebaseDatabase.getInstance().getReference()
.child("ADMINISTRATORS")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child("STAFF LIST")
.child(cursorAddData.getString(cursorAddData.getColumnIndex(TOKEN_COLUMN)))
.setValue(cursorAddData.getString(cursorAddData.getColumnIndex(EMAIL_COLUMN)))
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(StaffList.this, "staff entered successfully.", Toast.LENGTH_SHORT).show();
Log.i(TAG+ " addDataCheck", "email entered: "+cursorAddData.getString(cursorAddData.getColumnIndex(EMAIL_COLUMN)));
cursorAddData.moveToNext();
if(cursorAddData.isAfterLast()){
cursorAddData.close();
}
}else{
Toast.makeText(StaffList.this, "staff not entered!", Toast.LENGTH_SHORT).show();
cursorAddData.moveToNext();
if(cursorAddData.isAfterLast()){
cursorAddData.close();
}
}
}
});
}
}
Вызов этого метода отправляет только первый элемент, возвращенный курсором, в firebasedatase, оставляя остальные.
My Logcat показывает, что задачауспешно для любого количества вызовов.
Затем я попробовал другой подход, заполнив некоторые переменные String Array информацией курсора перед отправкой в базу данных firebased следующим образом:
private void AddData(){
Cursor cursorAddData = myDB.queryStaffList(new String[]{SERIAL_NO_COLUMN, EMAIL_COLUMN, TOKEN_COLUMN,}, null, null);
Log.i(TAG+ " addDataCheck", "no of data: "+cursorAddData.getCount());
String[] emails = new String[cursorAddData.getCount()];
String[] tokens = new String[cursorAddData.getCount()];
if(cursorAddData.moveToFirst()){
for(int i=0; i<emails.length; i++){
emails[i] = cursorAddData.getString(cursorAddData.getColumnIndex(EMAIL_COLUMN));
tokens[i] = cursorAddData.getString(cursorAddData.getColumnIndex(TOKEN_COLUMN));
cursorAddData.moveToNext();
}
for(int i=0; i<cursorAddData.getCount(); i++){
FirebaseDatabase.getInstance().getReference()
.child("ADMINISTRATORS")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child("STAFF LIST")
.child(tokens[i])
.setValue(emails[i])
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(StaffList.this, "staff entered successfully.", Toast.LENGTH_SHORT).show();
/*Log.i(TAG+ " addDataCheck", "no of data: "+emails[10]);
Log.i(TAG+ " addDataCheck", "email entered: "+cursorAddData.getString(cursorAddData.getColumnIndex(EMAIL_COLUMN)));
cursorAddData.moveToNext();
if(cursorAddData.isAfterLast()){
cursorAddData.close();
}*/
}else{
Toast.makeText(StaffList.this, "staff not entered!", Toast.LENGTH_SHORT).show();
/*cursorAddData.moveToNext();
if(cursorAddData.isAfterLast()){
cursorAddData.close();
}*/
}
}
});
}
}
cursorAddData.close();
}
и на этот раз всеэлементы были загружены в базу данных успешно. Пожалуйста, что не так с кодами первого метода, которые я использовал, потому что меня не устраивает мой второй метод. Я подозреваю, что проблема со временем.