Application中定义公用数据

来源:互联网 发布:侠客风云传优化怎么样 编辑:程序博客网 时间:2024/05/21 17:20

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
原创粉丝点击