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

ztmd8pv5  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(296)

我试着把我的代码像mvc一样分成几部分。我有一个片段,我想显示从firestore获取的用户名。我还有一个类(homecontroller),我把逻辑放在那里。在这个类中,我尝试实现一个从文档中获取用户名的方法。
家庭控制器

  1. public void getWelcomeNameText(final getNameCallback callback) {
  2. docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
  3. @Override
  4. public void onComplete(@NonNull Task<DocumentSnapshot> task) {
  5. if (task.isSuccessful()) {
  6. DocumentSnapshot document = task.getResult();
  7. if (document.exists()) {
  8. welcomeName = document.getString("clientName");
  9. }
  10. }
  11. callback.onCallback(welcomeName);
  12. }
  13. });
  14. }

我正在使用回调接口。

  1. public interface getNameCallback {
  2. void onCallback(String name);
  3. }

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

  1. public HomeController() {
  2. fAuth = FirebaseAuth.getInstance();
  3. fStore = FirebaseFirestore.getInstance();
  4. userID = fAuth.getUid();
  5. docRef = fStore.collection("Clients").document(userID);
  6. activeJobRef = fStore.collection("ActiveJobs");
  7. getWelcomeNameText(new getNameCallback() {
  8. @Override
  9. public void onCallback(String name) {
  10. welcomeName = name;
  11. //I want to pass this welcomeName to HomeFragment
  12. }
  13. });
  14. }

这很好地获取了用户名,但是我想在名为homefragment的片段中使用这个方法来设置textview的文本。所以实际上我想传递welcomename变量。但实际上我不知道怎么做。我在片段中实现了getnamecallback。
家庭碎片

  1. public class HomeFragment extends Fragment implements HomeController.getNameCallback, View.OnClickListener {
  2. //variables
  3. @Nullable
  4. @Override
  5. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  6. getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  7. View view = inflater.inflate(R.layout.fragment_home, container, false);
  8. postJob = view.findViewById(R.id.button_add_job);
  9. logout = view.findViewById(R.id.button_sign_out);
  10. bottomNav = getActivity().findViewById(R.id.bottom_nav);
  11. bottomNav.setVisibility(View.VISIBLE);
  12. loginName = view.findViewById(R.id.textView_login_name);
  13. noDataText = view.findViewById(R.id.textView_no_active_job);
  14. homeController = new HomeController();
  15. //here I want something like: loginName.setText(userNameFromCallback);
  16. return view;
  17. }
  18. @Override
  19. public void onCallback(String name) {
  20. //maybe I have to do something here?
  21. }

感谢您阅读这个-可能是一个非常业余的-问题!

gab6jxml

gab6jxml1#

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

  1. homeController.getWelcomeNameText(new HomeController.getNameCallback() {
  2. @Override
  3. public void onCallback(String name) {
  4. loginName.setText(name);
  5. }
  6. });

相关问题