2016-05-27 33 views
8

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. 
+0

Đ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 –

+0

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

+0

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? –

Trả lời

3

Vâng tôi chỉ figured it out. Suy nghĩ rằng có một sự khác biệt giữa hai dự án của tôi là một cá trích đỏ. Sự khác biệt thực sự là giữa hai thiết bị mà tôi đã triển khai hai dự án. Thiết bị đang hoạt động trên kết nối di động. Thiết bị không hoạt động trên mạng wifi công ty của chúng tôi sau một proxy.

Tôi có proxy được thiết lập chính xác trên thiết bị và tôi có thể truy cập các trang web bên ngoài ... tuy nhiên, có vẻ như firebase không sử dụng cài đặt proxy source.

Sẽ tuyệt vời nếu Firebase sử dụng cài đặt proxy thiết bị!

Các vấn đề liên quan