有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在另一个片段中使用Firestore回调

我试图将我的代码分成类似MVC的部分。我有一个片段,我想在其中显示从Firestore获取的用户名。 我还有一个类(HomeController),我把逻辑放在这里。在这个类中,我尝试实现一个从文档中获取用户名的方法

HomeController

public void getWelcomeNameText(final getNameCallback callback) {
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    welcomeName = document.getString("clientName");
                }
            }
            callback.onCallback(welcomeName);
        }
    });
}

我正在使用回调接口

public interface getNameCallback {
    void onCallback(String name);
}

同样在构造函数中,我调用上面的方法

public HomeController() {
    fAuth = FirebaseAuth.getInstance();
    fStore = FirebaseFirestore.getInstance();
    userID = fAuth.getUid();
    docRef = fStore.collection("Clients").document(userID);
    activeJobRef = fStore.collection("ActiveJobs");
    getWelcomeNameText(new getNameCallback() {
        @Override
        public void onCallback(String name) {
            welcomeName = name;
            //I want to pass this welcomeName to HomeFragment
        }
    });

}

这可以完美地获取用户名,但我想在名为HomeFragment的片段中使用此方法来设置TextView的文本。所以实际上我想传递welcomeName变量。但实际上我不知道怎么做。我在片段中实现了getNameCallback

HomeFragment

    public class HomeFragment extends Fragment implements HomeController.getNameCallback, View.OnClickListener {
    //variables

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        postJob = view.findViewById(R.id.button_add_job);
        logout = view.findViewById(R.id.button_sign_out);
        bottomNav = getActivity().findViewById(R.id.bottom_nav);
        bottomNav.setVisibility(View.VISIBLE);
        loginName = view.findViewById(R.id.textView_login_name);
        noDataText = view.findViewById(R.id.textView_no_active_job);

        homeController = new HomeController();

       //here I want something like: loginName.setText(userNameFromCallback);

       return view;
}

@Override
    public void onCallback(String name) {
    //maybe I have to do something here?
 }

谢谢你阅读这个问题——可能是一个非常业余的问题


共 (1) 个答案

  1. # 1 楼答案

    得到了答案,我知道这是一个愚蠢的问题:)我刚刚打电话:

    homeController.getWelcomeNameText(new HomeController.getNameCallback() {
                @Override
                public void onCallback(String name) {
                    loginName.setText(name);
                }
            });