简体   繁体   中英

ERROR anonymous com.google.firebase.database.ValueEventListener

Error: 'UsersAdapter(java.util.List<com.thptcualo.main.models.User>, com.thptcualo.main.listeners.UserListener)' in 'com.thptcualo.main.adapters.UsersAdapter' cannot be applied to '(java.util.List<com.thptcualo.main.models.User>, anonymous com.google.firebase.database.ValueEventListener)'

Class Recycl

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder>{

    private final List<User> users;

    //private final Userlistener userlistener;

    private final UserListener userListener;

    public UsersAdapter(List<User> users, UserListener userListener) {
        this.users = users;
        this.userListener = userListener;
    }

    @NonNull
    @Override
    public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ItemContainerBinding itemContainerBinding = ItemContainerBinding.inflate(
                LayoutInflater.from(parent.getContext()), parent, false);
        return new UserViewHolder(itemContainerBinding);
    }

    @Override
    public void onBindViewHolder(@NonNull UserViewHolder holder, int position) {
        holder.setUserData(users.get(position));
    }

    @Override
    public int getItemCount() {
        return users.size();
    }

    class UserViewHolder extends RecyclerView.ViewHolder{
        ItemContainerBinding binding;
        UserViewHolder(ItemContainerBinding itemContainerBinding){
            super(itemContainerBinding.getRoot());
            binding = itemContainerBinding;
        }

        void setUserData(User user){
            binding.TextName.setText(user.fullname);
            binding.Textemail.setText(user.email);
            //binding.getRoot().setOnClickListener(v->userlistener.onUserClicked(user));
            binding.getRoot().setOnClickListener(v->userListener.onUserCLicked(user));
        }

    }
}
public class Tab2 extends Fragment implements UserListener {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String lmeo;
    private Tab2Binding binding;
    private PreferenceManager preferenceManager;
    private String email;
    //private PreferenceManager preferenceManager;
    private String fullname;
    //Tab2Binding binding;
    private RecyclerView messagesRecyclerView;
    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    public Tab2() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment Tab2.
     */
    // TODO: Rename and change types and number of parameters
    public static Tab2 newInstance(String param1, String param2) {
        Tab2 fragment = new Tab2();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        getUsers();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //preferenceManager = new PreferenceManager(getApplicationContext());
        // Inflate the layout for this fragment
        binding=Tab2Binding.inflate(inflater,container,false);

        preferenceManager = new PreferenceManager(getActivity().getApplicationContext());

        getToken();

        return binding.getRoot();
        //return inflater.inflate(R.layout.tab2, container, false);
    }

    private void getToken(){
        FirebaseMessaging.getInstance().getToken().addOnSuccessListener(this::updateToken);
    }

    private void updateToken(String token) {
        DatabaseReference databaseReference = FirebaseDatabase.getInstance("https://somethings-great-default-rtdb.asia-southeast1.firebasedatabase.app").getReference("Users");
        databaseReference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("keyfcm").setValue(token);
    }

    private void getUsers(){
        loading(true);
        DatabaseReference db = FirebaseDatabase.getInstance("https://somethings-great-default-rtdb.asia-southeast1.firebasedatabase.app").getReference("Users");
        //db.getReference().child("User").get().addOnCompleteListener(this::onComplete);
        loading(false);
        //List<com.thptcualo.main.models.User> users = new ArrayList<>();
        //String CurUserId = preferenceManager.getString(Constants.KEY_EMAIL);

        DatabaseReference databaseReference = FirebaseDatabase.getInstance("https://somethings-great-default-rtdb.asia-southeast1.firebasedatabase.app").getReference();
        databaseReference.child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("email").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DataSnapshot> task) {
                if(!task.isSuccessful()){
                    //
                }
                else{
                    //preferenceManager.putString(Constants.KEY_NAME,String.valueOf(task.getResult().getValue()));
                    lmeo = String.valueOf(task.getResult().getValue());

                    Log.d("firebasename",String.valueOf(task.getResult().getValue()));
                }
            }
        });

        db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                List<User> users = new ArrayList<>();
                for(DataSnapshot dataSnapshot : snapshot.getChildren()){
                    com.thptcualo.main.models.User user = new com.thptcualo.main.models.User();

                    user = dataSnapshot.getValue(User.class);

                    //Log.d("LOGTEST", CurUserId);

                    if(!user.email.equals(lmeo)) {
                        users.add(user);
                    }
                    user.token="error";
                }
                if(users.size()>0){
                    UsersAdapter usersAdapter = new UsersAdapter(users,this);
                    binding.usersRe.setAdapter(usersAdapter);
                    binding.usersRe.setVisibility(View.VISIBLE);
                }else{
                    showerr();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

    private void showerr(){
        binding.TextError.setText(String.format("%s","Null lmao"));
        binding.TextError.setVisibility(View.VISIBLE);
    }

    private void loading(Boolean isLoading){
        if(isLoading){
            binding.progressBar.setVisibility(View.VISIBLE);
        }
        else{
            binding.progressBar.setVisibility(View.INVISIBLE);
        }
    }

    @Override
    public void onUserCLicked(User user) {
        Intent intent = new Intent(getApplicationContext(),chatscreen.class);
        intent.putExtra(Constants.KEY_USER,user);
        startActivity(intent);
    }
}
public interface UserListener {
    void  onUserCLicked(User user);
}

Since you're calling new UsersAdapter(users,this) inside db.addValueEventListener(new ValueEventListener() { , the this refers to the ValueEventListener and not to the Tab2 / UserListener that you need.

To fix this, explicitly indicate what type of this you want:

UsersAdapter usersAdapter = new UsersAdapter(users,Tab2.this);
//                                                  👆

Also see: Keyword for the outer class from an anonymous inner class

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM