Значение не присваивается в Android Java - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь присвоить количеству документов значение под firebase firestore.Я назначаю переменную я.Но в logcat это дает мне правильное значение, но когда я присваиваю переменную i и использую ее ниже, она все равно дает value 0.

ниже - код

public class FirestoreNew extends AppCompatActivity {

    FirebaseAuth mAuth;
    FirebaseFirestore mfirebasefs = FirebaseFirestore.getInstance();
    DocumentReference AllUserInfo_doc, AllTicketData_doc, AllPassesData_doc;
    CollectionReference UserData, TicketData, PassData;
    int i = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_firestore_new);

        //Auth Purpose
        mAuth = FirebaseAuth.getInstance();

        //Document Reference
        AllUserInfo_doc = mfirebasefs.collection(mAuth.getCurrentUser().getEmail())
                .document("AllUserData");
        AllTicketData_doc = mfirebasefs.collection(mAuth.getCurrentUser().getEmail())
                .document("AllTicketsData");
        AllPassesData_doc = mfirebasefs.collection(mAuth.getCurrentUser().getEmail())
                .document("AllPassesData");

        //Collection Reference
        UserData = AllUserInfo_doc.collection("UserDataCollection");
        TicketData = AllTicketData_doc.collection("TicketsList");
        PassData = AllPassesData_doc.collection("PassesList");



       TicketData.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    Log.d("TAG", task.getResult().size() + "");
                    i = task.getResult().size();
                } else {
                    Log.d("TAG", "Error getting documents: ", task.getException());
                }
            }
       });


       i = i + 1;
       String s = "Ticket" + i;
        Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
        //Documents
        DocumentReference myTicket = TicketData.document(s);
        Map<String, Object> map1 = new HashMap<>();
        map1.put("Ticket Number", "TEST123");
        map1.put("FROM","FROM PLACE");

        myTicket.set(map1);



    }
}

Нужна помощь в получении правильного значения i.

Мой текущий альтернативный обходной код, я выполняю операции внутри onCompleteListener.Однако я чувствую, что это не лучшее решение

 TicketData.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    Log.d("TAG", task.getResult().size() + "");
                    i = task.getResult().size();

                    ///////////////
                    i = i + 1;
                    String s = "Ticket" + i;
                   // Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
                    //Documents
                    DocumentReference myTicket = TicketData.document("Ticket" + i);
                    Map<String, Object> map1 = new HashMap<>();
                    map1.put("Ticket Number", "TEST123");
                    map1.put("FROM","FROM PLACE");

                    myTicket.set(map1);
                    //////////////
                } else {
                    Log.d("TAG", "Error getting documents: ", task.getException());
                }
            }
       });

1 Ответ

2 голосов
/ 17 июня 2019

Ваш onCompleteListener работает асинхронно, что означает, что (обычно) до того, как i получает назначенное значение, часть кода i = i+1 уже завершена.Вы должны придерживаться своего обходного пути, который на самом деле является правильным решением.Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...