2017-10-17 18 views
5

Đi qua Lab Mã cho căn cứ hỏa lực Android thân thiện trò chuyện - tại https://codelabs.developers.google.com/codelabs/firebase-android/ - Tôi chạy vào một vấn đề mà không ai trong số các callbacks đang được tiếp cận/kêu gọi bước 7: đọc tin nhắnCallback cho FirebaseRecyclerAdapter không chạy

đi qua các dự án android-start /, tôi có thể vượt qua được những bước đầu tiên 2-6:

  1. Tổng quan
  2. lấy mã mẫu
  3. nhập t ông khởi động ứng dụng
  4. Tạo căn cứ hỏa lực console Project
  5. Chạy ứng dụng khởi động
  6. Bật xác thực (ứng dụng android thêm với tên gói và SHA1 qua giao diện điều khiển dự án, vv)

Tuy nhiên, khi tôi đi để thực hiện bước 7 - không có cuộc gọi lại nào được gọi. Tôi chạy ứng dụng và các bước đăng nhập/đăng xuất đang hoạt động.

Tôi đã nhập initial_messages.json theo hướng dẫn tại đó và được sao chép qua mã chính xác cho bước 7 (một số nỗ lực để đảm bảo có thể tôi không bỏ lỡ điều gì đó trên đường đi) .. và sau đó thậm chí đã thử dự án đã hoàn thành/android. Ngoài ra, cùng một vấn đề mà callbacks không bao giờ chạy và vì vậy spinner chỉ treo ở đó.

Vì có quá nhiều mã, tôi sẽ đăng các phần mà tôi mong đợi một số cuộc gọi lại để chạy. Bất cứ ai có thể xin tư vấn về những gì tôi có thể bị thiếu ở đây? Và không có vấn đề - nếu nó sẽ giúp thêm nhiều mã tôi có. Cảm ơn bạn đã đọc

// mProgressBar.setVisibility(ProgressBar.INVISIBLE); 
    // New child entries 
    mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference(); 

    SnapshotParser<FriendlyMessage> parser = new SnapshotParser<FriendlyMessage>() { 
     @Override 
     public FriendlyMessage parseSnapshot(DataSnapshot dataSnapshot) { 
      ... 
     } 
    }; 
    ... 

    DatabaseReference messagesRef = mFirebaseDatabaseReference.child(MESSAGES_CHILD); 

    ... 

    FirebaseRecyclerOptions<FriendlyMessage> options = 
      new FirebaseRecyclerOptions.Builder<FriendlyMessage>() 
        .setQuery(messagesRef, parser) 
        .build(); 

    mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>(options) { 
     @Override 
     public MessageViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
      ... 
     } 

     @Override 
     protected void onBindViewHolder(final MessageViewHolder viewHolder, 
             int position, 
             FriendlyMessage friendlyMessage) { 
      .... 

     } 
    }; 

    mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      ... 
     } 
    }); 


    mMessageRecyclerView.setAdapter(mFirebaseAdapter); 

Trả lời

2

Trong phiên bản 3.0 của FirebaseUI, một lifecycle policy for FirebaseRecyclerAdapter mới đã được giới thiệu. Do đó, bây giờ bạn được yêu cầu gọi rõ ràng startListening() & stopListening() trên bộ điều hợp để hướng dẫn nó bắt đầu & dừng truy xuất dữ liệu từ cơ sở dữ liệu.

Từ FirebaseUI 3.0 upgrade guide:

Adaptor Vòng đời - trong các phiên bản trước đây adapter bắt đầu nghe ngay khi instantiation và đã có một cuộc gọi cleanup() ngừng nghe. Trong 3.x, bạn phải gọi một cách rõ ràng startListening()stopListening() hoặc chuyển một số LifecycleOwner đến trình tạo tùy chọn.

Đây là bản phát hành gần đây và có vẻ như Phòng thí nghiệm mã chưa được cập nhật để phản ánh thay đổi đột phá này. Tôi đã nêu điều này là an issue on the firebase/friendlychat-android GitHub repo.

+1

Tôi không biết tôi nên kiểm tra với bất kỳ hướng dẫn nâng cấp .. con trỏ tốt ở đó, như tôi đã không nhìn thấy nó được đề cập trong Lab Lab .. hmm? Tất cả mã Code Lab .. nếu không thì chỉ đơn giản là 1 dòng này thiếu 'mFirebaseAdapter.startListening();' và không có mã nào trong số đó hoạt động. Tôi đã không chắc chắn nếu tôi thậm chí nên đăng bài này, nghĩ rằng tôi phải đã bỏ lỡ một cái gì đó hiển nhiên. Tôi biết chúng ta phải tránh cảm ơn bạn - nhưng trong trường hợp này, bạn thực sự đã bắt gặp một vấn đề quan trọng mà tôi nghĩ; như tôi đoán nhiều người sử dụng các Lab Mã đó ..đã lưu ngày của tôi cho chắc chắn (Cảm ơn) – gnB

+1

Vui vì tôi có thể giúp! Tôi biết ý anh là gì, nó đã bắt tôi vào đầu tuần này và tôi không thể tin rằng đây là cách chữa trị! Điều này đặc biệt kỳ lạ mặc dù vì tôi không thể nhớ phòng thí nghiệm mã thậm chí còn đề cập rằng nó sử dụng FirebaseUI. Tương tự như vậy, gần đây họ [cập nhật các phụ thuộc của mã mẫu] (https://github.com/firebase/friendlychat-android/commit/a88cd214e5528e17fd3c234d83589d85872650e2) nhưng không thêm cuộc gọi phương thức rất quan trọng đó! Tôi đoán đó là những gì xảy ra khi các thư viện thực hiện các thay đổi đột phá. – Grimthorr

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