首页 > 解决方案 > 全局变量在内部类中不为空,但在外部为空

问题描述

我有一个名为“myEmail”的全局变量,我想在方法内更改它的值,这样做时变量的值确实会改变,但仅在方法内(我已经使用日志检查过)但是在尝试再次使用变量时更改值后它为空。

我不知道这个问题的原因是什么。我尝试在 onCreate 上调用该方法,因为我认为变量 get 在更改值之前可能已被调用,但问题仍然存在。

这是我的代码

public class messagesFragment extends Fragment {
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private String uid = FirebaseAuth.getInstance().getUid();
    private CollectionReference messageRef = db.collection("messages");
    private View v;
    private RecyclerView recyclerView;
    private messageAdapter mAdapter;
    private String myEmail;
    private FloatingActionButton addmsg;

    public messagesFragment() {
    }
    // Creating the fragment view.
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.messages_fragment, container, false);
        addmsg = (FloatingActionButton) v.findViewById(R.id.sendmsgfab);
        addmsg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), createmessageActivity.class);
                startActivity(intent);
            }
        });

        getemail();       // Here the variable myEmail is null.
        setupRecycler();

        return v;
    }

    private void getemail(){
        DocumentReference documentReference = db.collection("users").document(uid);
        documentReference.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(final DocumentSnapshot documentSnapshot) {
                myEmail = documentSnapshot.get("email").toString();
              // Here the variable myEmail is not null.
            }
        });
        }

    private void setupRecycler() {
        Query query = messageRef.whereEqualTo("receiver", myEmail);
        FirestoreRecyclerOptions<message> options = new FirestoreRecyclerOptions.Builder<message>()
                .setQuery(query, message.class)
                .build();
        mAdapter = new messageAdapter(options);
        recyclerView = (RecyclerView) v.findViewById(R.id.messagesRecycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(mAdapter);
    }

    @Override
    public void onStart() {
        super.onStart();
        mAdapter.startListening();
    }

    @Override
    public void onStop() {
        super.onStop();
        mAdapter.stopListening();
    }
}

标签: androidandroid-fragmentsandroid-lifecycle

解决方案


您的 getemail 方法的返回值是无效的!请在您的方法中将 String 替换为 void。


推荐阅读