Firebase метод синхронизации не синхронизируется - PullRequest
0 голосов
/ 24 октября 2018

Код

public class HomeScreen_Friends extends Fragment {

    private View rootView;
    private String userName;
    private String UID;
    private TextView noUsersText;
    private ProgressDialog mProgressDialogue;

    private FirebaseAuth mAuth;
    private FirebaseUser currentUser;
    private  DatabaseReference mDatabaseReference;
    private  DatabaseReference mUsersDatabase;

    private RecyclerView mUsersList;
    private FirebaseRecyclerAdapter<AllUsersHelper, UsersViewHolder> firebaseRecyclerAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_friends, container, false);

        noUsersText = (TextView) rootView.findViewById(R.id.noUsersText);
        mUsersList = (RecyclerView) rootView.findViewById(R.id.usersList);
        mUsersList.addItemDecoration(new DividerItemDecoration(getContext(),
                DividerItemDecoration.HORIZONTAL));


        mAuth = FirebaseAuth.getInstance();
        currentUser = mAuth.getCurrentUser();
        UID = mAuth.getCurrentUser().getUid();
        mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Friends").child(UID);
        mDatabaseReference.keepSynced(true);
        mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("UserData");
        mUsersDatabase.keepSynced(true);

        mProgressDialogue = new ProgressDialog(getActivity());
        mProgressDialogue.setMessage("Loading...");
        mProgressDialogue.show();

        mUsersList.setLayoutManager(new LinearLayoutManager(getActivity()));

        FirebaseRecyclerOptions<AllUsersHelper> options =
                new FirebaseRecyclerOptions.Builder<AllUsersHelper>()
                        .setQuery(mDatabaseReference, AllUsersHelper.class)
                        .build();

        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsersHelper, UsersViewHolder>(options) {

            @Override
            protected void onBindViewHolder(@NonNull final UsersViewHolder holder, int position, @NonNull AllUsersHelper model) {
                holder.setName(model.getName());
                holder.setStatus(model.getStatus());
                holder.setImage(model.getImage());

                final String userId = getRef(position).getKey();

                mUsersDatabase.orderByChild("Name");
                mUsersDatabase.child(userId).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        String mName = dataSnapshot.child("Name").getValue().toString();
                        String mStatus = dataSnapshot.child("Status").getValue().toString();
                        String mDisplayImage = dataSnapshot.child("Image").getValue().toString();

                        if(dataSnapshot.hasChild("Online")) {

                            String userOnline = dataSnapshot.child("Online").getValue().toString();
                            holder.setUserOnline(userOnline);

                        }
                        holder.setName(mName);
                        holder.setImage(mDisplayImage);
                        holder.setStatus(mStatus);
                        mProgressDialogue.dismiss();

                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });



                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("UserData").child(userId);

                        rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                userName = dataSnapshot.child("Name").getValue().toString();
                                Intent intent = new Intent(getActivity(), Chat.class);
                                intent.putExtra("Recievers_Id", userId);
                                intent.putExtra("Recievers_Name", userName);
                                startActivity(intent);
                            }
                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        });
                    }
                });
            }




                    @Override
            public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.custom_activity_all_users, parent, false);
                return new UsersViewHolder(view);
            }
        };
        mUsersList.setAdapter(firebaseRecyclerAdapter);
        return rootView;
    }

    public static class UsersViewHolder extends RecyclerView.ViewHolder {
    public View mView;

    public UsersViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setName(String name) {
        TextView mDisplayName = (TextView) mView.findViewById(R.id.display_name);
        mDisplayName.setText(name);
    }

    public void setStatus(String status) {
        TextView mDisplayStatus = (TextView) mView.findViewById(R.id.display_status);
        mDisplayStatus.setText(status);
    }

    public void setImage(String image) {
        CircularImageView mDisplayImage = (CircularImageView) mView.findViewById(R.id.circleImageView);
        Picasso.get().load(image).into(mDisplayImage);
    }

    public void setUserOnline(String userOnline) {
        ImageView userOnlineView = (ImageView) mView.findViewById(R.id.online);

        if(userOnline.equals("Online")){

            userOnlineView.setVisibility(View.VISIBLE);

        } else {

            userOnlineView.setVisibility(View.INVISIBLE);

        }

    }
    }

    @Override
    public void onStart() {
        super.onStart();
        firebaseRecyclerAdapter.startListening();
    }
    @Override
    public void onStop() {
        super.onStop();
        if(firebaseRecyclerAdapter != null) {
            firebaseRecyclerAdapter.stopListening();
        }
    }

}

Куда я должен поместить метод keepSynced для извлечения данных в автономном режиме, потому что я пробовал ниже ссылки на базу данных, и мои данные по-прежнему не отображаются, когда у меня нет Интернета.Может ли кто-нибудь помочь мне, пожалуйста ... Также, если результат нулевой, как я могу остановить диалог прогресса и показать текст, который говорит, что нет пользователей.

1 Ответ

0 голосов
/ 24 октября 2018

Прямо сейчас вы просто говорите Firebase, чтобы поддерживать пустой слушатель активным на ваших Friends и UserData узлах.Это гарантирует, что данные с этих узлов всегда обновляются (даже если вы не подключаете других слушателей), но данные все еще хранятся только в памяти.

Сохранение кэша памяти на диске, чтобы его можно было перезагрузить, если у вас нет подключения к Интернету при запуске приложения, вам нужно будет позвонить FirebaseDatabase.getInstance().setPersistenceEnabled(true) при запуске приложения.См. включение сохранения диска в документации Firebase.

См. Также:

...