0

SharedPreferencesクラスを作成して、残りのアクティビティをオンラインで使用して設定を取得できるようにしました。

 public class SPAdapter extends Activity {

    public final String preferenceSettings = "STORAGE";

        // Default value if row does not exist in preference
     public static final String rowExistence = "Row did not exist";

public String prefGet(String preferenceName, String rowId) {
    SharedPreferences preferenceObject = getSharedPreferences(preferenceName, MODE_PRIVATE);
    String value = preferenceObject.getString(rowId, rowExistence);
    return value;
}

私はこの方法を次のように使用します:

    public class Splash extends Activity {

     private SPAdapter spObject;
     public String rowNumber(0);
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.splash);

         spObject.prefGet(spObject.preferenceSettings,
            rowNumber);
}

ただし、このメソッドを使用しようとすると、アプリケーションがクラッシュし、コンテキストに関するエラーが表示されます。誰かが私にこれを機能させるための手を差し伸べることができますか?

4

1 に答える 1

0

このアプローチの問題は、アクティビティから SPAdapter を拡張し、適切に初期化しないことです。適切なコンテキスト セットがないため、それを介してフレームワークから SharedPreferences インスタンスを取得できません。とにかく、これは Android で行うべき方法ではありません。新しい Activity オブジェクトをインスタンス化するのはあなたではなく、フレームワークの仕事であるはずです。これを機能させるには、次の 2 つの方法があります。

  • Splash アクティビティを SPAdapter から拡張します。

  • Activity から SPAdapter を拡張しないでください。Context オブジェクトの参照を渡し、それを使用して SharedPreferences インスタンスを取得するだけです。このようなもの:

    public class SPAdapter { public final String preferenceSettings = "ストレージ";

    // Default value if row does not exist in preference
    public static final String rowExistence = "Row did not exist";
    
    private Context ctx;
    
    public SPAdapter(Context ctx){
        this.ctx = ctx;
    }
    
    public String prefGet(String preferenceName, String rowId) {
        SharedPreferences preferenceObject = ctx.getSharedPreferences(
                preferenceName, Context.MODE_PRIVATE);
        String value = preferenceObject.getString(rowId, rowExistence);
        return value;
    }
    

    }

次のように使用します。

public class FsActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SPAdapter sa = new SPAdapter(getApplicationContext());
        sa.prefGet("", "");
    }
}

最初の解決策は、少し良いようです。

于 2012-04-14T06:24:47.260 に答える