【发布时间】:2018-09-06 12:37:35
【问题描述】:
我正在尝试在 Firebase Firestore 上注册 20 个用户并在我的集合中为每个用户创建一个文档。我的程序成功注册了 20 个用户,但在为他们创建文档时失败了。 18, 每次创建 19 个文档,但它几乎总是跳过为我的数组的第一个成员和最后一个成员创建一个文档。 StudentCreator 只是一个文件,它有一个父数组,有 20 个项目的学生数组。 这是一个来自 studentCreator.java 的数组
public static String parent_names[]={
"Ahmet Lola",
"Hüseyin Kutlutürk",
"Ümit Uğrak",
"Veysel Karani",
"Serkan Gotar",
"Dündar Zalim",
"Kadir Berkay",
"Uğur Özdemir",
"Bünyamin Akgün",
"Kaptan Price",
"Selim Tekiner",
"Gökçe Yılan",
"Talip Özkan",
"Abdurrahman Tarikçi",
"Selim Kirlier",
"Hasan Can Doğan",
"Erdem Gökşen",
"Fatoş Ünal",
"Nurgül Birtek",
"Yuan Hui"};
这里是主要代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Intent LoginActivity = new Intent(this,LoginActivity.class);
final Intent TeacherActivity = new Intent(this,TeacherActivity.class);
final Intent ParentActivity = new Intent(this,ParentActivity.class);
final Intent ManagerActivity = new Intent(this,ManagerActivity.class);
for (int i = 0; i < 20; i++)
{
mAuth = FirebaseAuth.getInstance();
final String username = StudentCreator.parent_names[i].replaceAll(" ", "") + StudentCreator.student_numbers[i];
final String email = username + "@onurmail.com";
final String password = "123456";
final String student_name = StudentCreator.student_names[i];
final String parent_name = StudentCreator.parent_names[i];
//Registration is successul here.
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d("User Registered", "createUserWithEmail:success");
final FirebaseUser user = mAuth.getCurrentUser();
final String user_id = user.getUid();
//I get valid userId's for 20 users.
//CREATE STUDENT OBJECT AND FIREBASE INSTANCES
final FirebaseFirestore db = FirebaseFirestore.getInstance();
final Map<String, Object> student = new HashMap<>();
student.put("student_name", student_name);
student.put("parent_name", parent_name);
//My first element of array comes here and prints its parent name and student name perfectly but cant see anything about it on database.
//PUT STUDENT TO THE DB
db.collection("TED_Ankara")
.document(parent_name)
.set(student)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(getApplicationContext(), "User inserted sucessfully: "+parent_name,
Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), "User cannot be inserted: "+parent_name,
Toast.LENGTH_SHORT).show();
}
}
});
//PUT STUDENT TO THE DB
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "createUserWithEmail:failure", task.getException());
Toast.makeText(getApplicationContext(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
}
}
请帮忙。我对 addOnCompleteListener 和 firebaseAuth 的使用持怀疑态度。但我不确定。感谢您的帮助。
编辑:在没有 for 循环的情况下添加第一个成员没有任何问题。所以我想问题出在 for 循环上。
【问题讨论】:
标签: android firebase nosql firebase-authentication google-cloud-firestore