【问题标题】:Problems calling Android's getSharedPreferences(); from SQLiteOpenHelper class调用 Android 的 getSharedPreferences() 时出现问题;来自 SQLiteOpenHelper 类
【发布时间】:2010-02-27 00:01:29
【问题描述】:

首先我想简要描述一下我的情况。

我有两个类,一个 MainClass 和一个 DataBaseHelper 类,它扩展了 SQLiteOpenHelper。

从我的 MainClass 我调用 DataBaseHelper 类中的一个方法来打开一个数据库。在打开数据库之前,我想检查用户数据库版本(这很重要,因为我想更新数据库并将其推送到 Android 市场)。因此,我从 DataBaseHelper 类中调用了 MainClass 中的以下方法。

 public int checkCurrentDbVersion(){
        // Restore preferences
        SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);
        int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
        return dbUpgradeVar;        
    }

我从 DataBaseHelper 类中调用 checkCurrentDbVersion() 方法,如下所示:

    MainClass currentDbVersion = new MainClass(); 

    int oldDbVersion = currentDbVersion.checkCurrentDbVersion();

只要调试器运行以下行,它就会停止。

SharedPreferences settings = getSharedPreferences(PREFERENCES, 0);

我做错了什么?我没有定义构造函数。会不会是失败?

最好的问候 乔赫

【问题讨论】:

    标签: database android android-preferences


    【解决方案1】:

    我找到了一个解决方案,我想分享一下。可以在这里找到:

    Passing data through intents instead of constructors

    我忘记了上下文(我仍然不能 100% 确定上下文是什么,但无论如何...)。

    为了让代码正常工作,我改变了它:

     public int checkCurrentDbVersion(Context context){
            // Restore preferences
            SharedPreferences settings = context.getSharedPreferences(PREFERENCES, 0);
            int dbUpgradeVar = settings.getInt("dbUpgradeVar", 1);
            return dbUpgradeVar;        
        }
    

    调用方法

    private final Context myContext;
    
    /*
    *do some other stuff here
    */
    
        MainClass currentDbVersion = new MainClass(); 
    
        int oldDbVersion = currentDbVersion.checkCurrentDbVersion(myContext);
    

    【讨论】:

    • 谢谢,非常感谢您的提问/回答。我从一个已经有上下文的活动中调用我的“getSharedPreferences”,但我必须添加“this”。从头到尾(荒谬)。
    【解决方案2】:

    这是我的解决方案 1.我的应用无法使用。

    import androidx.appcompat.app.AppCompatActivity;
    
    SharedPreferences settings = new AppCompatActivity().getSharedPreferences(PREFERENCES, 0);
    

    2.在我的应用中运行良好

        public static boolean isLoggedIn(AppCompatActivity activity) {
            final SharedPreferences loggedSP = activity.getSharedPreferences(SP_name.get_Logged_SPname(), MODE_PRIVATE);
            return loggedSP.getBoolean(SP_name.get_Logged_SPkey(),false);
        }
    

    在我的主要活动中执行它

    boolean a = LoginRepository.isLoggedIn(this);
    

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2017-12-29
      相关资源
      最近更新 更多