Tôi có một ứng dụng hiện có mà tôi đang cố chuyển đổi để sử dụng Cơ sở dữ liệu Firebase. Dưới đây là một số mã mà tôi đang sử dụng khi tôi cố gắng tiết kiệm một Object:Dữ liệu không được lưu vào Firebase từ Ứng dụng Android
...
private FirebaseDatabase database;
private DatabaseReference waypointRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
database = FirebaseDatabase.getInstance();
waypointRef = database.getReference(Utils.WAYPOINT_REFERENCE);
waypointRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
FBWaypoint wp = dataSnapshot.getValue(FBWaypoint.class);
wp.setId(dataSnapshot.getKey());
Log.e(TAG, String.format("Child Added: %s, %s, %s, Prev: %s", wp.getName(), wp.getLatitude(), wp.getLongitude(), previousChildName));
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
FBWaypoint wp = dataSnapshot.getValue(FBWaypoint.class);
Log.e(TAG, String.format("Child Changed: %s, %s, %s, Prev: %s", wp.getName(), wp.getLatitude(), wp.getLongitude(), previousChildName));
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
FBWaypoint wp = dataSnapshot.getValue(FBWaypoint.class);
wp.setId(dataSnapshot.getKey());
Log.e(TAG, String.format("Child Removed: %s, %s, %s, Prev: %s", wp.getName(), wp.getLatitude(), wp.getLongitude()));
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
FBWaypoint wp = dataSnapshot.getValue(FBWaypoint.class);
Log.e(TAG, String.format("Child Moved: %s, %s, %s, Prev: %s", wp.getName(), wp.getLatitude(), wp.getLongitude(), previousChildName));
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "Failed to add Child Listener.", databaseError.toException());
}
});
...
}
Sau khi tạo một đối tượng, tôi lưu nó như thế này:
waypointRef.push().setValue(wp);
Tôi thấy callbacks bắn trong nhật ký của tôi vào thời điểm này (cùng với các giá trị cho các id được tạo ra bởi căn cứ hỏa lực:
Child Added: Hrbrbe, 44.969846, -89.670527, Prev: null
Child Added: Hdbece, 44.956019, -89.666436, Prev: -KInIzqk6m96lwVWF6Pc
Child Added: Hebdbr R, 44.970372, -89.673188, Prev: -KInJ17sfsQ4v_fUrAW3
Tuy nhiên, tôi không thấy bất cứ điều gì trong giao diện điều khiển căn cứ hỏa lực cho những hồ sơ này Ngoài ra khi tôi khởi động lại ứng dụng, gọi lại onChildAdded không. bị đuổi.
Tôi cũng đã tạo một ứng dụng khác, chỉ chứa mã ở trên ... và hoạt động tốt. Vì vậy, tôi không chắc chắn nếu một cái gì đó tôi đang làm trong ứng dụng hiện tại của tôi là ảnh hưởng đến firebase? Tuy nhiên, tôi không chắc rằng điều đó có thể là gì vì tôi cũng đã lấy tất cả các phụ thuộc của mình và đưa chúng vào dự án đơn giản.
Bất kỳ ý tưởng nào về những gì tôi có thể kiểm tra tiếp theo?
CẬP NHẬT: Tôi đã thêm Trình nghe không đầy đủ như được đề xuất. Nó không bao giờ được gọi. Nếu tôi thêm một FirebaseDatabase.purgeOutstandingWrites() sau khi setValue(), sau đó các onComplete được gọi với các lỗi sau:
DatabaseError: The write was canceled by the user.
Điều đầu tiên cần làm là thêm trình xử lý hoàn thành vào 'setValue()' để xem liệu nó có kết thúc bằng một lỗi hay không. Tha sẽ cho phép bạn ghi lại bất kỳ vấn đề tiềm ẩn nào mà báo cáo cơ sở dữ liệu (ví dụ: đối với logcat). Xem https://firebase.google.com/docs/database/android/save-data#receive_a_completion_callback –
Chỉnh sửa nhận xét trước của tôi (hiện đã bị xóa). OnComplete đã không nhận được gọi là ở tất cả. Xem CẬP NHẬT trong câu hỏi chính. – Innova
Bit cuối cùng này nghe có vẻ như bạn không có kết nối với cơ sở dữ liệu. Ổ cứng có được bật trong ứng dụng của bạn không? Nếu vậy, bạn có thể xem mọi thứ có thay đổi khi bạn vô hiệu hóa điều đó không? –