我的Firebase代码无法向用户个人资料添加联系人。这个确切的代码用于工作正常,现在它到今天它自己进入一个无限循环并重复创建联系人,直到我强制杀死应用程序。我无法解决循环的位置,或者可能已经改变的地方!
代码:
public class AddContacts extends AppCompatActivity {
private EditText addContactNumber;
private Button btnAddContact;
private String userResult, searchPhone, ping_userID;
private FirebaseAuth pingAuth;
DatabaseReference ref;
private FirebaseAuth.AuthStateListener pingAuthListener;
addContactNumber = (EditText) findViewById(R.id.addContactNumber);
btnAddContact = (Button) findViewById(R.id.btnAddContact);
btnAddContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchPhone = addContactNumber.getText().toString();
ref = FirebaseDatabase.getInstance().getReference().child("Profiles");
ref.orderByChild("Phone").equalTo(searchPhone).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
userResult = datas.getKey();
if (userResult != null) {
ping_userID = pingAuth.getCurrentUser().getUid();
DatabaseReference newContact = FirebaseDatabase.getInstance().getReference().child("Profiles").child(ping_userID).child("Contacts");
newContact.setValue(userResult);
DatabaseReference newContactPing = FirebaseDatabase.getInstance().getReference().child("Profiles").child(ping_userID).child("Contacts").child(userResult).child("PingStatus");
newContactPing.setValue(false);
DatabaseReference addRef = FirebaseDatabase.getInstance().getReference().child("Profiles").child(userResult).child("Name");
addRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String resultName = dataSnapshot.getValue(String.class);
DatabaseReference addContactName = FirebaseDatabase.getInstance().getReference().child("Profiles").child(ping_userID).child("Contacts").child(userResult).child("Name");
addContactName.setValue(resultName);
Toast.makeText(getBaseContext(), "User: " + resultName + " added successfully.", Toast.LENGTH_SHORT).show();
ref.removeEventListener(this);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else {
Toast.makeText(getBaseContext(), "User not found.", Toast.LENGTH_SHORT).show();
ref.removeEventListener(this);
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
另外,也许作为一个旁边,它永远不会触发"用户未找到" event,即使我输入了数据库中没有的详细信息。
有什么想法吗?我确信它正盯着我,但我不明白。
@Peter Haddad数据库按要求:
MyAppDatabase
-Profiles
-BCsuC4XAZqVhWj
-Name: "Simon"
-Phone: 123456
-Contacts
-pnYn1NhzzNQAm
-Name: "Bill"
-PingStatus: false
-pnYn1NhzzNQAm
-Name: "Bill"
-Phone: 987654
-Contacts
-BCsuC4XAZqVhWj
-Name: "Simon"
-PingStatus: false
答案 0 :(得分:0)
在两种情况下都使用addListenerForSingleValueEvent
代替addValueEventListener
。