3

まず、自分の状況を簡単に説明したいと思います。

2つのクラスがあります。1つはMainClassクラスで、もう1つはSQLiteOpenHelperを拡張するDataBaseHelperクラスです。

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

私は何が間違っているのですか?コンストラクターが定義されていません。それは失敗でしょうか?

よろしくJohe

4

2 に答える 2

10

共有したい解決策を見つけました。それはここで見つけることができます:

コンストラクターではなくインテントを介してデータを渡す

コンテキストを忘れました(コンテキストが何であるかはまだ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);
于 2010-02-27T00:52:39.173 に答える
0

これが私の解決策です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);
于 2020-02-06T11:43:25.660 に答える