2012-04-14 6 views
0

SharedPreferencesクラスを作って残りのアクティビティをオンラインで使用して環境設定を取得できるようにしました。Androidで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); 
} 

。誰も私に手を差し伸べてこれを働かせることはできますか?

+0

たちが嘆願時に熟考するためにスタックトレースを追加します:) – erbsman

+0

あなたは簡単にSharedPreferencesを使用する方法を知っているために、このリンクを見ることができます: http://stackoverflow.com/questions/10127396/save-values-before-close- the-app/10127842#10127842 – secretlm

答えて

0

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

  • SPAdapterからスプラッシュアクティビティを拡張するには、次の2つの方法があります。

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

    public class SPAdapter { public final String preferenceSettings = "STORAGE";

    // 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("", ""); 
    } 
} 

最初のソリューションは、芋少し良さそうです。

+0

ご協力ありがとうございます。私はAndroidのコンテキストを完全に理解していない、おそらくいくつかの研究を行う時間。今のところ私はあなたのソリューションを使用します。 – Hennaz

関連する問題