2016-06-20 25 views
5

tôi đang làm việc trên căn cứ hỏa lực cho lần đầu tiên, đọc về khả năng ẩn của căn cứ hỏa lực, thử nghiệm hai kịch bản:cách xử lý cơ sở dữ liệu Firebase ngoại tuyến khi ứng dụng Android bị giết?

kịch bản 1 (làm việc):

  1. chế độ offline, ghi dữ liệu vào cơ sở dữ liệu căn cứ hỏa lực .

  2. bấm lại nút (ứng dụng đóng)

  3. đi trực tuyến, dữ liệu đã được bổ sung vào cơ sở dữ liệu căn cứ hỏa lực.

kịch bản 2 (không làm việc):

  1. chế độ ngoại tuyến, ghi dữ liệu vào cơ sở dữ liệu căn cứ hỏa lực
  2. ứng dụng gần
  3. ứng dụng
  4. loại bỏ khỏi nền (giết ứng dụng)
  5. đi trực tuyến, dữ liệu không được thêm

Tôi đã thêm dòng này:

Firebase.getDefaultConfig().setPersistenceEnabled(true); 

cách xử lý kịch bản 2? Tôi có cần xử lý kịch bản này thông qua cơ sở dữ liệu cục bộ không?

+1

Khi bạn duy trì hoạt động liên tục với Firebase, nó sẽ tiếp tục hoạt động. Nhưng trong kịch bản 2, dữ liệu sẽ không được gửi đến máy chủ cho đến khi bạn khởi động lại ứng dụng. Nếu điều đó không khắc phục được, hãy hiển thị bản sao chép hoàn chỉnh, tối thiểu của sự cố. Mô tả mã không rõ ràng hơn so với mã thực tế. –

+0

Tôi đang đối mặt với vấn đề tương tự với bất kỳ giải pháp nào mà bạn có alka aswal, hãy giúp –

+0

Tham chiếu đến nhận xét của bạn @FrankvanPuffelen có nghĩa là các giá trị được đặt bằng các phương thức như 'setValue()' hoặc 'updateChildren()' db từ xa trong khi cùng không được thực hiện cho phương thức 'runTransaction()'? Có đúng không? – Droidwala

Trả lời

0

Tôi đoán bạn đang sử dụng một số dịch vụ để đồng bộ hóa dữ liệu, Nó sẽ không hoạt động cho trường hợp thứ 2. Đối với điều đó khi người dùng bật dịch vụ dữ liệu, bạn sẽ nhận được một máy thu phát sóng, từ dịch vụ kiểm tra đó không chạy, sau đó khởi động dịch vụ.

0

Bạn đang sử dụng Firebase.getDefaultConfig().setPersistenceEnabled(true);keepSynced(true)?

Bởi vì trong Firebase documentation nói rằng keepSynced(true) đó là những người đưa ra "kỳ diệu" xảy ra (cùng với setPersistenceEnabled(true)):

Bằng cách gọi keepSynced (true) vào một vị trí, dữ liệu cho vị trí đó sẽ tự động được tải về và được giữ đồng bộ, ngay cả khi không có người nghe nào được đính kèm cho vị trí đó. Ngoài ra, trong khi một vị trí được giữ đồng bộ hóa, nó sẽ không được gỡ bỏ khỏi bộ nhớ cache đĩa liên tục.

Vì vậy, nếu bạn không sử dụng nó, bạn không kiên trì cơ sở dữ liệu cục bộ và khi bạn "giết" ứng dụng, sẽ không có bất kỳ cơ sở dữ liệu nào để truy vấn khi ứng dụng của bạn được mở lại.

0

Không cần xử lý kịch bản 2 bằng cách sử dụng cơ sở dữ liệu cục bộ. Sử dụng Firebase.getDefaultConfig(). SetPersistenceEnabled (true) trong lớp ứng dụng và đặt android: name = "yourapplicationclass" trong tệp kê khai. để xử lý đồng bộ hóa trong khi thay đổi mạng tức là xử lý giao dịch trực tuyến/ngoại tuyến sử dụng để xử lý đồng bộ cục bộ với cơ sở dữ liệu firebase vì một số dữ liệu tome không được đẩy vào máy chủ firebase.Như thế này, tôi đã sử dụng phương pháp thay đổi mạng bên trong và giải quyết vấn đề này:

mDatabase.runTransaction(new Transaction.Handler() { 
      @Override 
      public Transaction.Result doTransaction(MutableData mutableData) { 
       if(mutableData.getValue() == null) { 
        mutableData.setValue(1); 
       } else { 
        mutableData.setValue((Long) mutableData.getValue() + 1); 
       } 
       return Transaction.success(mutableData); //we can also abort by calling Transaction.abort() 
      } 

      @Override 
      public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { 

      } 
     }); 
Các vấn đề liên quan