首页新闻找找看学习计划

在android APP中如何设计一个user类

0
悬赏园豆:10 [已解决问题] 解决于 2014-12-11 10:37

  做一个android app,为了管理app中的用户信息,需要一个user类,虽然最终的用户信息是保存在服务器端,但是当我从服务器中获取了某个user的信息时,我用这个user类来保存,在app的activity中很有可能会修改这些信息(比如用户在某个页面中修改了密码),那么就要求设计的这个user类能够全局共享,任何一个activity修改了它都要保存,我该如何设计这个类才能保证全局共享呢?

菜鸟的梦醒的主页 菜鸟的梦醒 | 初学一级 | 园豆:71
提问于:2014-12-10 16:31
< >
分享
最佳答案
0

单例模式,或者自定义Application将该对象保存在Application类中,设置公共方法获取。

收获园豆:10
林J | 菜鸟二级 |园豆:202 | 2014-12-10 16:40

我之前自己想了一下,初步写成了下面这样(没写完,基本格式是这样的),我手头没有成熟的案例,我在想这样有没有什么不妥?

public class AppDevice extends Application {
   public String name;    
   public int color;  
   public int id;   
   public int type;  
   public boolean status;  
   public int lostTime;    
   public String locatoin;
}

还有如果是单例模式的话是不是说直接定义一个java类就行了,然后设计成单例,这样是否能够实现共享心里没底,我以前也没有写过大一点的java工程,所以希望大神能解释详细点。

菜鸟的梦醒 | 园豆:71 (初学一级) | 2014-12-10 16:53

@菜鸟的梦醒: Application类是android系统类,你每个应用程序启动时都会初始化一个Application对象,是全局调用的,在activity内使用getApplication()就能获取到.你可以自定一个Application类,这样

public class UILApplication extends Application{
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

在配置文件AndroidManifest.xml中,给applicaton节点设置name为这个UILApplication

 <application
        android:name="com.test.test.UILApplication"

在Activity内这样调用

UILApplication application=(UILApplication)getApplication();
User user=application.getUser();

 

林J | 园豆:202 (菜鸟二级) | 2014-12-10 17:01

@林J: 单例模式的话,静态对象有可能会被系统回收掉,推荐用Application保存。

林J | 园豆:202 (菜鸟二级) | 2014-12-10 17:02

@林J: 看您的意思是说先自己定义一个user类,然后把这个user类作为application的一个成员,我现在还有一个类Device,这个也需要全局共享,那我在application中这样写private Device device; 实现get和set方法,也就是说有多少个全局共享的类,只需要在application中添加多少成员就行了,是吗?

菜鸟的梦醒 | 园豆:71 (初学一级) | 2014-12-10 17:09

@菜鸟的梦醒: 是的

林J | 园豆:202 (菜鸟二级) | 2014-12-10 17:10

@林J: 还是说一下吧,以上两种全局共享都不可靠,在系统因为内存不足回收掉应用时,你保存的数据都会消失。比如说你应用放在后台很久再打开,getUser就会返回null,因为这段时间内Application可能已经被回收过再重新创建了。如果你的user类只是作为当前登录用户来使用的话,可以考虑存入sharepreference内,这个方法简单,但是不适用你需要管理一堆user的情况。或者在ActivityA跳转到ActivityB(假设在B界面修改user数据)时作为intent的bundle参数放入,这样在activityB恢复时会读取bundle参数重新赋值。之后ActivityB修改结束后,在ActivityA通过onActivityResult重置A的值。这种情况User必须继承Serializable或者Parcel接口。

林J | 园豆:202 (菜鸟二级) | 2014-12-10 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册