您的位置:首页 > 移动开发

Application中定义公用数据

2015-12-23 15:01 441 查看
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 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android