Android编程,静态变量

时间:2016-06-07 08:25:19

标签: java android android-studio static-variables

我是Android编程的新手,我有一个问题。我有一个活动类和一个java类。 java类用于创建数据库。按活动类中的按钮时,数据库将填充一些数据。填充数据库后,我想返回活动并能够在数据库中显示数据。我有一个变量profileStatus,其false值,我想在填充数据库后将其值更改为trueprofileStatus是一个静态变量,所以我从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。有什么帮助吗?

4 个答案:

答案 0 :(得分:0)

您应该在两个地方添加Log.i.然后通过查看日志,您可以知道哪一个先运行。

答案 1 :(得分:0)

如果你想使用一些静态对象,最好使用Singleton模式。 活动生命周期不会像你想象的那样保持你的变量(因为我认为这是你的情况),因为你得到的这个变量的实例不是来自Activity实例,而是来自非instatiated类的静态字段。有几种解决方案。  1.在构造函数中发送您的字段的引用(在这种情况下,profileStatus最好是非静态的)。

public class YourJavaClass {
   var profileStatus;
   public YourJavaClass(var profileStatus) {
    this.profileStatus = profileStatus;
}
}
  1. 发送活动参考。代码看起来是一样的,但是你从Activity(MainActivity.profileStatus)得到的变量字段

  2. 使用Singleton类作为示例应用程序扩展。定义此类的静态实例,并将您用作静态的字段放在此类

    公共类MyAndroidApplication扩展了应用程序{
     private var profileStatus;  private static MyAndroidApplication sAppInstance;

      {
        sAppInstance = this;
      }
    
      public static MyAndroidApplication getAppInstance() {
        return sAppInstance; 
    

    }

      public var getProfileStatus() {
        return profileStatus;  
    

    } }

    在你的java类中,要使用此

  3. 来获取变量

    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);