java - 聊天应用程序 - 更新 token 聊天 fragment - 新版本

标签 java android firebase google-cloud-platform firebase-cloud-messaging

我正在创建一个聊天应用程序,我导入了这个已有 3 年历史的项目,所以很多事情都发生了变化,尤其是这个我无法修复的事情有人可以帮助我吗?谢谢。

给我的错误:

“com.koddev.chatapp.Fragments.ChatsFragment”中的“updateToken(java.lang.String)”无法应用于“(com.google.android.gms.tasks.Task)” '

public class ChatsFragment extends Fragment {

private RecyclerView recyclerView;

private UserAdapter userAdapter;
private List<User> mUsers;

FirebaseUser fuser;
DatabaseReference reference;

private List<Chatlist> usersList;

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

    recyclerView = view.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    fuser = FirebaseAuth.getInstance().getCurrentUser();

    usersList = new ArrayList<>();

    reference = FirebaseDatabase.getInstance().getReference("Chatlist").child(fuser.getUid());
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            usersList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                Chatlist chatlist = snapshot.getValue(Chatlist.class);
                usersList.add(chatlist);
            }

            chatList();
        }

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

        }
    });

    updateToken(FirebaseMessaging.getInstance().getToken());


    return view;
}

private void updateToken(String token){
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Tokens");
    Token token1 = new Token(token);
    reference.child(fuser.getUid()).setValue(token1);
}

private void chatList() {
    mUsers = new ArrayList<>();
    reference = FirebaseDatabase.getInstance().getReference("Users");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mUsers.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);
                for (Chatlist chatlist : usersList){
                    if (user.getId().equals(chatlist.getId())){
                        mUsers.add(user);
                    }
                }
            }
            userAdapter = new UserAdapter(getContext(), mUsers, true);
            recyclerView.setAdapter(userAdapter);
        }

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

        }
    });
}

最佳答案

您收到以下错误:

'updateToken(java.lang.String)' in 'com.koddev.chatapp.Fragments.ChatsFragment' cannot be applied to '(com.google.android.gms.tasks.Task<java.lang.String>)'

因为您使用错误的参数调用 updateToken() 方法。当您使用 Task 对象调用该方法时,您定义了该方法以采用 String 参数,因此会出现错误。如果您想获取token并正确调用方法,请使用以下几行代码:

FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            String token = task.getResult();
            updateToken(token);
            Log.d("TAG", token); //Check the generated token.
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

关于java - 聊天应用程序 - 更新 token 聊天 fragment - 新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71860211/

相关文章:

java - 如何创建函数来更新不同 i 的变量?

java - 可观察到像 Lmax Disruptor 这样的批处理

android - 即使在 onDestroy() 方法中将实例设置为 null,Activity 仍然会泄漏

android - 如何在android中显示与Android市场使用的相同的弹出窗口?

android sqlite按钮不可点击

ios - Firebase 数据比较 swift

java - 将静态代码分析从单独的进程转移到 Eclipse 插件

java - 帮助 Java 日历——它给出了一些奇怪的输出

java - 如何使用多个 firebase 项目填充 ListView

firebase云功能部署错误-错误TS6133