Here task (object) is being saved to fireBase Database, but for setting ListID and ID there r few conditions:
if this is user's first task then set both to 20k
if User already have task Lists in the firebase then add listId of thet task List to present task's listID and add (ID of user's last task + 1) to Id of present task.
What i want the sequence to be ( see Log.e(..) statements in the code ) :
1-> 2-> 3-> 4-> 5-> 6-> 7
What is actually happening : 1-> 4-> 5-> 7-> 2-> 3
(Also, Never going to 6 ... For which i reffered following : Can't reach some lines debugging android app & Android studio gradle breakpoint No executable code found at line ...... But all in vain)
( DBToFireb(..) is a method where changeListener is being used inside onComplete(..) of DatabaseReference.CompletionListener() )
public static boolean addTaskToFireBase(final Activity activity, final com.rb.eztask.model.TodoTask task, final ChangeListener changeListener)
{
mDatabase=FirebaseDatabase.getInstance().getReference("tasks");
final String taskId = mDatabase.push().getKey();
task.setTaskId(taskId);
final DatabaseReference myFieBaseDBChecker=FirebaseDatabase.getInstance().getReference("users").
child(Userkey).child("tasks");
myFieBaseDBChecker.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String s=dataSnapshot.getValue().toString();
if(s!=null)
{
if(s.contentEquals(","))
{
task.setId(20000);
task.setListId(20000);
task.setKey(UserKey);
DBToFireb(activity, taskId, task, changeListener);
}
else
{ String tasks[]=s.split(",");
final String lastTask = tasks[tasks.length-1];
DatabaseReference compareDb;
for(int i=0;i<tasks.length;i++)
{
if(tasks[i].length()>2)
{Log.e("im","1");
compareDb=FirebaseDatabase.getInstance().getReference("task").child(tasks[i]);
compareDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("im","2");
TodoTask taskToCompare=dataSnapshot.getValue(TodoTask.class);
Log.e("im","3");
if(taskToCompare.getBasketName().equals(task.getBasketName()))
{
task.setListId(taskToCompare.getListId());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Log.e("im","4");
compareDb=FirebaseDatabase.getInstance().getReference("tasks").child(lastTask);
Log.e("im","5");
compareDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("im","6");
TodoTask lastTaskInFireB = dataSnapshot.getValue(TodoTask.class);
task.setListId(lastTaskInFireB.getListId()+1);
task.setId(lastTaskInFireB.getId()+1);
task.setKey(UserKey);
DBToFireb(activity, taskId, task, changeListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Log.e("im","7");
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return true;
}