2016-10-30 11 views
0

私はAndroidのSharedPreferencesの汎用ラッパーメソッドを定義して、より便利に定義済みのパラメータのリストを取得します。汎用メソッドを使用してAndroid SharedPreferencesにアクセスする

は当初、私は、すべてのサポートされているタイプ(私の場合は文字列、のInt &ブール)の列挙型を定義し、それらの一つ一つは、それに対応するクラスに関連付けられている:

public enum ParamType { 

    String(String.class), 
    Int(Intent.class), 
    Bool(Boolean.class); 

    private final Class paramClass; 
    ParamType(Class paramClass) { 
     this.paramClass = paramClass; 
    } 
} 

は、それから私は、既知の列挙型を定義しましたそれぞれの関連するタイプと、私が使用するパラメータ、:

public enum Param { 

    FirstParam(ParamType.Bool), 
    SecondParam(ParamType.String), 
    ThirdParam(ParamType.Int); 

    Param(ParamType paramType) { 
     this.paramType = paramType; 
    } 

    private final ParamType paramType; 

} 

その後、私は与えられたパラメータによって、適切な型を返すために知っているだろうことを、汎用的な方法を持っていると思います:

public static <T> T getParamValue(Param param) { 

} 

しかし、私はこのメソッドを実装する方法がわからないし、実際には可能ですが、一般的なTパラメータは上記の署名に渡されないためです。

答えて

0

OVERENGINEERINGですが、しないでください。カスタムオブジェクトを保存して読み込み、SharedPreferencesとデータベース用に実装するためのインターフェイスを作成することができます。しかし、5つのタイプがある場合は、整数タイプごとにジェネリックを作成する必要はありません。

+0

私のアプリでは、私はSharedPreferencesに保存するパラメータがたくさんあります。私は、それぞれの文字列定数を定義するための良いコードではないより良いアプローチを見つけようとしています。また、新しいパラメータを追加することも容易になります – Tamir

+0

その場合、パラメータを保存するために領域データベースを使用し、アプリケーションの別の機能を使用してみてください。クラスを作成し、キーなしで保存/読み込みできます。ほとんどの場合、電話ファイルの任意の場所にデータベースファイルを保存し、ファイルをコピーして設定を管理できます。欠点は、領域がアプリのサイズを大きくすることです。 –

+0

私はセンサーの読み取り値を保存するためにその方法を使用しました。単純なアプリケーション設定の場合、それは過剰なものです –

関連する問題