Application中定义公用数据

Android编写代码的过程中会遇到过很多数据传递的问题,很多人认为在Application中公开get() set()方法,这样Activity之间的传值就不用Intent跳转来回传值那么麻烦了,而这些数据就变成了全局的数据,岂不是很方便?但是这样做的最终结果会导致NullPointerException,下面我写一个Demo来测试一下这个问题:

Step 1:创建一个测试Application

class TestApplication extends Application{
    String userName;
    String getUserName(){
        return userName;
    }

    void setUserName(String userName){
        this.userName = userName;
    }
}

Step 2 创建SetActivity,为userName赋值:

public class SetActivity extends Activity {

    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.writing);

        TestApplication test= (TestApplication)getApplication();
        test.setUserName("GodLoveMichael");
        startActivity(new Intent(this, GetActivity.class));

    }

}

Step 3:创建GetActivity取出userName的值显示到UI上:

public class GetActivity extends Activity{

    private TextView mUserNameTv;
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_activity_layout);
        mUserNameTv =(TextView) findViewById(R.id.username);
    TestApplication test = (TestApplication)getApplication();
            mUserNameTv.setText(test.getUserName().size());
    }
}

Step 4 打开SetActivity 后按Home键使app 推到后台,过段时间之后app崩溃,当用户重新返回,想打开app时候,显示Log NullPointerException
这是因为当用户重新返回app时候GetActivity 重新恢复了onResume 的状态,但是TestApplication 却是一个被kill掉重新创建的过程,所以此时该Application中并没有当时SetActivity 存的“GodLoveMichael”,自然调用.size()的时候会报NullPointerException ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值