【问题标题】:Database Query from Fragment从 Fragment 查询数据库
【发布时间】:2018-07-31 09:08:57
【问题描述】:

完整代码

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_chats, 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("UserData");


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

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

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

    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AllUsers, HomeScreen_Contacts.UsersViewHolder>(options) {

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

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

            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 HomeScreen_Contacts.UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.all_users_layout, parent, false);
            return new HomeScreen_Contacts.UsersViewHolder(view);
        }
    };
    mUsersList.setAdapter(firebaseRecyclerAdapter);
    return rootView;
}


public static class UsersViewHolder extends RecyclerView.ViewHolder {
    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);
    }
}

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

我必须使用这个片段中的查询顺序

我的代码

final ArrayList<AllUsers> messages = new ArrayList<>();
            mDatabaseReference.child(UID).orderByChild("LastMessage").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
    messages.add(dataSnapshot.getValue(AllUsers.class));
    }
    Collections.reverse(messages);
    }
    }
@Override
public void onCancelled(DatabaseError databaseError) {
    }
    });

但我不知道将这段代码放在哪里......或者这甚至是我正在尝试做的正确方法。有人请帮助我。几天以来一直卡在这里。

【问题讨论】:

  • 你的问题很浅,请注明你想做什么,代码很好,可以在fragment中使用
  • 我应该把代码放在哪里是我的问题
  • 只是在oncreateview中随机出现?它会起作用吗?
  • 好吧,让我回答
  • This 是一种推荐的方式,您可以通过这种方式从 Firebase 实时数据库中检索数据,并使用 FirebaseRecyclerAdapter 将其显示在 RecyclerView 中。它也可以在片段中工作。

标签: java android database firebase firebase-realtime-database


【解决方案1】:

在活动中,我们将onCreate 作为活动启动时运行的方法,在片段中使用onCreateView。在 Activity 上启动 Firebase 侦听器时,我们使用 onStartonStop,这与 Fragment 的情况相同。

将您的代码放入onCreateView

【讨论】:

  • 在 oncreateview @EmiliaJames
  • 但我尝试将其放入 oncreate 本身但没有工作
  • 好吧,那是另一个问题,我可以在这里为你调试代码 Fiverr.com/lucemanb/help-you-debug-your-android-studio-errors
猜你喜欢
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多