代码之家  ›  专栏  ›  技术社区  ›  Kadiem Alqazzaz

初始化MainActivity中的对象,然后全局访问它

  •  0
  • Kadiem Alqazzaz  · 技术社区  · 8 年前

    我想在MainActivity中创建一个对象,但我想全局访问它,所以假设我有这个类

    public class User {
    
    private String description;
    private String display_name;
    private String email;
    private String followers;
    private String following;
    private String posts;
    private String profile_photo;
    private String user_id;
    private String username;
    
    public User(){}
    
    
    public User(String description, String display_name, String email, String followers, String following, String posts, String profile_photo, String user_id, String username) {
        this.description = description;
        this.display_name = display_name;
        this.email = email;
        this.followers = followers;
        this.following = following;
        this.posts = posts;
        this.profile_photo = profile_photo;
        this.user_id = user_id;
        this.username = username;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    public String getDisplay_name() {
        return display_name;
    }
    
    public void setDisplay_name(String display_name) {
        this.display_name = display_name;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
    
    public String getFollowers() {
        return followers;
    }
    
    public void setFollowers(String followers) {
        this.followers = followers;
    }
    
    public String getFollowing() {
        return following;
    }
    
    public void setFollowing(String following) {
        this.following = following;
    }
    
    public String getPosts() {
        return posts;
    }
    
    public void setPosts(String posts) {
        this.posts = posts;
    }
    
    public String getProfile_photo() {
        return profile_photo;
    }
    
    public void setProfile_photo(String profile_photo) {
        this.profile_photo = profile_photo;
    }
    
    public String getUser_id() {
        return user_id;
    }
    
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
    
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    @Override
    public String toString() {
        return "User{" +
                "description='" + description + '\'' +
                ", display_name='" + display_name + '\'' +
                ", email='" + email + '\'' +
                ", followers='" + followers + '\'' +
                ", following='" + following + '\'' +
                ", posts='" + posts + '\'' +
                ", profile_photo='" + profile_photo + '\'' +
                ", user_id='" + user_id + '\'' +
    
    
                   ", username='" + username + '\'' +
                    '}';
        }
    }
    

    public static User currentUser;
    
    private void setupFirebase() {
    
    
        Log.e(TAG, "setupFirebase: Setting up firebase");
    
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
                Log.e(TAG, "onDataChange: Retrieving data.....");
                FirebaseMethods firebaseMethods = new FirebaseMethods(mContext);
                currentUser = new User();
                currentUser = firebaseMethods.getUserSettings(dataSnapshot);
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
    
            }
        });
    }
    

    现在我有了多个活动和片段,如何访问它 currentUser 我知道我可以用这样的东西 currentUser = MainActivity.currentUser;

    2 回复  |  直到 8 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    我建议你看看: https://android-developers.googleblog.com/2018/08/google-releases-source-for-google-io.html

    有几种选择:

    1. 将数据保存在某个地方(例如数据库)并从那里加载每个屏幕( documentation
    2. 使用Rx为存储库中的某个地方的多个订阅者共享下载的数据。
    3. 使用Gson或Parcelable序列化对象并通过intent发送。

    在我看来,第三种变体是最好的。

        2
  •  2
  •   Saeed    8 年前

    我建议你按以下程序做。您可以在应用程序的整个生命周期内创建全局变量keep remain值,而不管运行哪个活动。

    1扩展基本应用程序类

    扩大基础 android.app.Application 类并添加成员变量,如下所示:

        public class myUser extends Application {
    
        private String description;
        ...
    
        public String getDescription() {
             return description;
        }
    
        public void setDescription(String description) {
             this.description = description;
        }
    
        ...
    
       }
    

    2在舱单上声明:

    manifest android.app.Application应用程序 android:name=".myUser" 现有应用程序标记的属性):

    <application 
      android:name=".myUser" 
      android:icon="@drawable/my_icon" 
      android:label="@string/app_name">
    

    三。设置/获取活动中的变量

    get set 变量如下:

    // initialise your user variable
    // set description variable
    ((myUser) this.getApplication()).setDescription("your description");
    
    // get description variable
    String s = ((myUser) this.getApplication()).getDescription();
    

    希望对你有帮助。