我是Android编程的新手,我有一个问题。我有一个活动类和一个java类。 java类用于创建数据库。按活动类中的按钮时,数据库将填充一些数据。填充数据库后,我想返回活动并能够在数据库中显示数据。我有一个变量profileStatus
,其false
值,我想在填充数据库后将其值更改为true
。 profileStatus
是一个静态变量,所以我从java类MainActivity.profileStatus=true
访问它,但在我返回活动后,该值仍为false。这是我的代码。
这是在MainActivity类中。
public void profileStatus(View view){
if(profileStatus==false){
createProfile(view);`
}
else if(profileStatus==true){
displayProfile(view)}
这就是我在java类中所拥有的。
if(counter==5){
profileValues.put(col_1,a);
profileValues.put(col_2,b);
profileValues.put(col_3,c);
profileValues.put(col_4,d);
profileValues.put(col_5,e);
db.insert(TABLE_NAME,null,profileValues);
MainActivity.profileStatus=true;
}
我正在访问变量profileStatus
,但是当我返回活动时,该值仍为false。有什么帮助吗?
答案 0 :(得分:0)
您应该在两个地方添加Log.i.然后通过查看日志,您可以知道哪一个先运行。
答案 1 :(得分:0)
如果你想使用一些静态对象,最好使用Singleton模式。 活动生命周期不会像你想象的那样保持你的变量(因为我认为这是你的情况),因为你得到的这个变量的实例不是来自Activity实例,而是来自非instatiated类的静态字段。有几种解决方案。 1.在构造函数中发送您的字段的引用(在这种情况下,profileStatus最好是非静态的)。
public class YourJavaClass {
var profileStatus;
public YourJavaClass(var profileStatus) {
this.profileStatus = profileStatus;
}
}
发送活动参考。代码看起来是一样的,但是你从Activity(MainActivity.profileStatus)得到的变量字段
使用Singleton类作为示例应用程序扩展。定义此类的静态实例,并将您用作静态的字段放在此类
中公共类MyAndroidApplication扩展了应用程序{
private var profileStatus;
private static MyAndroidApplication sAppInstance;
{
sAppInstance = this;
}
public static MyAndroidApplication getAppInstance() {
return sAppInstance;
}
public var getProfileStatus() {
return profileStatus;
} }
在你的java类中,要使用此
MyAndroidApplication.getAppInstance.getProfileStatus,您可以根据需要更改此变量
*“var”表示您的类型,例如boolean profileStatus
答案 2 :(得分:0)
此profileStatus
MainActivity.profileStatus=true;
不是此profileStatus
public void ...(View view){
if(profileStatus==false)
不管任何修饰符,例如:static。
如果你认真访问你的数据库,你需要使用活动实例的profileStatus。
答案 3 :(得分:0)
您似乎想在第一次打开MainActivity时加载数据库并在后续打开时显示数据。
使用SharedPreference存储配置文件状态
,而不是静态变量SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("profileStatus", true);
editor.commit();
获取profileStatus的值
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
profileStatus = sharedPref.getBoolean("profileStatus", false);