在一个APP中有很多时候需要运用一整套的数据,那么我们可以使用Application来进行对整个应用所需要的全局变量进行存储,以及数据共享,在下面我实现的是一个单例模式下的共享数据(单例模式:一个类只能实例化一个对象),下面写的例子是把一个登录用户信息进行全局的一个存储与获取。
在最开始实现一个简单的登录布局以及显示布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_corner"
android:orientation="horizontal"
android:layout_marginTop="10dp">
<!-- android:background="@null" 下划线miss-->
<EditText
android:id="@+id/edit_username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="用户名"
android:background="@null"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_corner"
android:orientation="horizontal"
android:layout_marginTop="80dp">
<EditText
android:layout_width="0dp"
android:id="@+id/edit_password"
android:layout_weight="1"
android:layout_height="50dp"
android:inputType="textPassword"
android:hint="密码"
android:background="@null"/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/btn_login"
android:background="@drawable/shape_corner"
android:layout_marginTop="220dp"
android:text="登录"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="username"
android:layout_marginTop="100dp"/>
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="password"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
之后我们书写一个HappyAndroidApplication类来继承自原Application
public class HappyAndroidApplication extends Application {
//单例模式
private static HappyAndroidApplication singleInstance;
public static HappyAndroidApplication getInstance(){
return singleInstance;
}
@Override
public void onCreate() {
super.onCreate();
singleInstance = this;
}
private String username = "";
private String password = "";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
登录界面代码如下:
public class LoginV2Activity extends Activity {
private EditText edit_username;
private EditText edit_password;
private Button btn_login;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.loginv2_activity);
edit_username = findViewById(R.id.edit_username);
edit_password = findViewById(R.id.edit_password);
btn_login = findViewById(R.id.btn_login);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = edit_username.getText().toString();
String password = edit_password.getText().toString();
//通过调用这个单例来设置Application中的username以及password
HappyAndroidApplication.getInstance().setUsername(username);
HappyAndroidApplication.getInstance().setPassword(password);
Intent intent = new Intent(LoginV2Activity.this, GlobalVariableActivity.class);
startActivity(intent);
}
});
}
}
紧接着我们在输出界面去尝试获取数据:
public class GlobalVariableActivity extends Activity {
private TextView username;
private TextView password;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.global_variable_activity);
username = findViewById(R.id.username);
password = findViewById(R.id.password);
String user = HappyAndroidApplication.getInstance().getUsername();
String pass = HappyAndroidApplication.getInstance().getPassword();
username.setText(user);
password.setText(pass);
}
}
注意我们需要在AndroidManifest.xml的配置文件中加入Application的那么,使用我们创建的Application来替代默认的Application:
android:name=".HappyAndroidApplication"