java - 在 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());
}
}
});
解决方案
您的 onCompleteListener 正在异步工作,这意味着(通常)在i
获得分配的值之前,i = i+1
部分代码已经结束。你应该坚持你的解决方法,这实际上是一个有效的解决方案。干杯!
推荐阅读
- r - 在 r 中填充一个 4-D 数组
- javascript - 专注于 v-for 问题中的 textarea
- python - sqlite3什么时候回滚python中的事务,什么时候不回滚?
- c# - Unity2D:修复库存冲突
- java - Android:如何使用 Java 在文本视图中显示动态 HTML 字符串
- image - Coredata 图像转换 swiftUI
- c++ - 触发 Embarcadero 10.2.3 Erreur ilink32
- python - 如何从嵌套列表中删除小于给定长度的条目
- mysql - Laravel 登录超时
- java - 如何给二维数组第二个插槽“无限空间”?JAVA