在Firebase数据库

时间:2016-12-01 10:50:07

标签: firebase firebase-realtime-database

我正在与Firebase构建一个聊天应用程序,我遇到了识别谁是谁的问题,当用户向另一个用户发送消息时,他需要将其发布到接收者节点,并且他需要知道他的UID才能这样做。我需要知道如何获取接收器的UID,因此我可以直接发布到他自己的节点。

我尝试使用intent.putExtra中的intent.getExtrasMainActivity来列出其目录中的每个用户,这是我当前的代码无法成功传递我需要的数据。

 public static class PlaceholderFragment extends Fragment {

    private DatabaseReference mDatabase;
    private FirebaseAuth mAuth;
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    public PlaceholderFragment() {
    }

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    public static class UserHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        View mView;


        public UserHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            mView = itemView;
        }

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


        public void setImage(String image){
            ImageView pp = (ImageView) mView.findViewById(R.id.imageurl);
            try{
                Picasso.with(Application.getAppContext()).load(image).placeholder(R.drawable.nodp).error(R.drawable.nodp).transform(new CircleTransform()).into(pp);
            }
            catch (IllegalArgumentException e){
                Picasso.with(Application.getAppContext()).load(R.drawable.nodp).transform(new CircleTransform()).into(pp);
            }
        }


        @Override
        public void onClick(View mView) {


            //what to do here
        }


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        //textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));



        //private static final String TAG = "UserListActivity";


            //final TextView name = (TextView) rootView.findViewById(R.id.lastname) ;
            //final ImageView profileImage = (ImageView) rootView.findViewById(R.id.imageView4);
            mAuth = FirebaseAuth.getInstance();
            FirebaseUser user = mAuth.getCurrentUser();

            final DatabaseReference root = FirebaseDatabase.getInstance().getReference();
            DatabaseReference userRef = root.child("users");



            RecyclerView recycler = (RecyclerView) rootView.findViewById(R.id.recyclerview3);
            recycler.setHasFixedSize(true);
            recycler.setLayoutManager(new LinearLayoutManager(getActivity()));



            FirebaseRecyclerAdapter mAdapter = new FirebaseRecyclerAdapter<UserList, UserHolder>(UserList.class, R.layout.userlistrow, UserHolder.class, userRef) {
                @Override
                public void populateViewHolder(UserHolder userViewHolder, final UserList userList, final int position) {

                    //try catch block to catch events of no posts, it will most likely return a null error, so im catching it, else
                    //find its exception and catch it
                    try {

                        String firstname = userList.getFirstname().toString();
                        String lastname = userList.getLastname().toString();
                        firstname = firstname.substring(0, 1).toUpperCase() + firstname.substring(1); //convert first string to uppercase
                        lastname = lastname.substring(0, 1).toUpperCase() + lastname.substring(1);// same thing happening here
                        String name = (firstname + " " + lastname); // concatenate firstname and lastname variable.
                        userViewHolder.setName(name);



                    }
                    catch(NullPointerException e) {

                        String firstname = "Not";
                        String lastname = "set";
                        String name = (firstname + " " + lastname );
                        userViewHolder.setName(name);


                    }
                    catch (StringIndexOutOfBoundsException e) {

                        String firstname = "No";
                        String lastname = "name";
                        String name = (firstname + " " + lastname );
                        userViewHolder.setName(name);

                    }

                    //note that picasso view holder was applied in the view holder instead
                    //String image = userList.getImgUrl().toString();
                    //userViewHolder.setImage(image);
                    //findViewById(R.id.progressBar3).setVisibility(View.GONE);

这是我传递额外内容的地方,它似乎无法正常工作

                    userViewHolder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //Log.w(TAG, "You clicked on "+position);
                            //String firstname = userList.getFirstname();
                            //String lastname = userList.getLastname();
                            //firstname = firstname.substring(0, 1).toUpperCase() + firstname.substring(1); //convert first string to uppercase
                            //lastname = lastname.substring(0, 1).toUpperCase() + lastname.substring(1);// same thing happening here
                            //String name = (firstname + " " + lastname); // concatenate firstname and lastname variable.

                            Intent intent = new Intent(getActivity(), Userdetail.class); //change to onclick
                            intent.putExtra("userId", userList.getUserId());//you can name the keys whatever you like
                            intent.putExtra("lastname", userList.getLastname().toString());
                            intent.putExtra("firstname", userList.getFirstname().toString());
                            intent.putExtra("image", userList.getImgUrl().toString()); //note that all these values have to be primitive (i.e boolean, int, double, String, etc.)
                            startActivity(intent);

                        }
                    });

                }


            };
            recycler.setAdapter(mAdapter);


        return rootView;
    }
}

如果您需要更多信息,请在评论中提问。我用Google搜索但没有帮助

package com.mordred.theschoolapp;

import com.google.firebase.database.IgnoreExtraProperties;

/**
 * Created by mordred on 11/28/16.
 */
public class UserList {
    public String firstname;
    public String lastname;
    public String userId;
    public String imgUrl;

public UserList() {
    // Default constructor required for calls to DataSnapshot.getValue(User.class)
}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

public String getImgUrl() {
    return imgUrl;
}

public void setImgUrl(String imgUrl) {
    this.imgUrl = imgUrl;
}

public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

}

0 个答案:

没有答案