【问题标题】:Call an Actvity from inside a Class从类内部调用 Activity
【发布时间】:2020-01-27 03:33:23
【问题描述】:

我需要从包含 Firebase 的方法 onDataChange 的单独类中调用活动。

所以,我可以在 Firebase 提供我想要的数据后调用 Activity。我只是无法从我的类中插入方法startActivitygetBaseContextIntent

我的班级是我的用户:

public class myUser{
    private static ArrayList<String> userData;

    public static ArrayList<String> getUserData() {
        return userData;
    }
     ...
}

我的代码(INSIDE myUser)是:

    public static void setUserData(FirebaseAuth mAuth) {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    userData = new ArrayList<>();
    String uID;

    uID = mAuth.getCurrentUser().getUid();
    DatabaseReference userRef = database.getReference("users/" + uID);

    userRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String cpf, email, name, tel;
            Boolean depend;
            int uType;

            cpf = dataSnapshot.child("cpf").getValue(String.class);
            email = dataSnapshot.child("email").getValue(String.class);
            name = dataSnapshot.child("name").getValue(String.class);
            tel = dataSnapshot.child("tel").getValue(String.class);
            depend = dataSnapshot.child("depend").getValue(Boolean.class);
            uType = dataSnapshot.child("uType").getValue(Integer.class);

            userData.add(name);
            userData.add(email);
            userData.add(cpf);
            userData.add(tel);
            userData.add(depend.toString());
            userData.add(String.valueOf(uType));

           //HERE IS WHERE I NEED TO CALL THE ACTIVITY, AFTER GET ALL DATA

        }

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

        }
    });
}

不管我如何称呼或实例化我的班级myUser。该代码正在运行,但它返回错误,因为onDataChange(在myUser 类中)在活动打开后运行。因此,ArrayList 返回 null 或空。

这就是为什么我需要从我的类 myUser 的方法 setUserData 内部调用我的 Activity

我尝试用许多其他课程扩展我的课程myUser,但没有成功。

【问题讨论】:

  • 您可以从另一个Activity 开始一个Activity。所以,如果myUser 不是一个Activity,你肯定会从一个Activity 调用setUserData:你应该从那里启动这个Activity,或者至少将一个Context 参数传递给setUserData
  • 下面 Majuran 的回答告诉你怎么做。但是,如果我是你,我宁愿重组应用程序,这样你就不需要从 pojo 启动 Activity。
  • 如果您对干净的 Firebase 身份验证感兴趣,可以查看此article
  • 谢谢大家。实际上,我很久以前就在外面工作,我没有时间继续编写代码。当我完成这项工作时,我会尝试这个答案并返回一个响应。

标签: java android firebase firebase-realtime-database android-activity


【解决方案1】:

改变这个方法

public static void setUserData(FirebaseAuth mAuth) {

public static void setUserData(Context context, FirebaseAuth mAuth) {

然后像这样从您的 Activity 类中调用它

setUserData(this, mAuth);

因此您可以在 myUser 类中使用活动上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多