首页 > 解决方案 > 在 Android Java 中未分配值

问题描述

我正在尝试分配 a 下的文档计数值firebase firestore。我正在分配给变量 i。但是在 中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());
                }
            }
       });

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


您的 onCompleteListener 正在异步工作,这意味着(通常)在i获得分配的值之前,i = i+1部分代码已经结束。你应该坚持你的解决方法,这实际上是一个有效的解决方案。干杯!


推荐阅读