2012-05-01 14 views
2

私はSharedPreferencesを現在1つのクラスでは動作しますが、2番目のクラスでは動作しません。複数のクラス間でSharedPreferencesを使用していますか?

The method getSharedPreferences(String, int) is undefined for the type CheckPreferences 

SharedPreferncesで正しく動作するコードはこれです:私の他のクラスでは

public void loadApp() 
{ 
    setContentView(shc_BalloonSat.namespace.R.layout.main); 
    alert = new AlertDialog.Builder(this).create(); 
    //String returned = ""; 
    lastpacketsPHP = ""; 
    pref = getSharedPreferences("shared_prefs", 1); 
    prefEditor = pref.edit(); 
    //prefEditor.putString(lastpacketsPHP, "/* Insert PHP file location here */"); 
    //prefEditor.commit(); 

    // These next two lines are used to test the PHP files on the SHC server by determining if PHP is set up correctly. 
    prefEditor.putString(lastpacketsPHP, "/* Insert PHP file location here */"); 
    prefEditor.commit(); 

    if (!isNetworkConnected(this)) 
    { 
    showAlert(); 
    } 

    else 
    { 
    api = new httpAPI(this); 
     map = new mapAPI(this); 
     dialog = new runDialog(this, api, new runDialog.OnDataLoadedListener() 
     { 

      public void dataLoaded(String textViewString) 
      { 
      infoTV = (TextView)findViewById(shc_BalloonSat.namespace.R.id.info); 
       infoTV.setText(textViewString); 
       assignInfoToInfoTextView(); 
       assignInfoToHistoryTextView(); 
      } 
     }); 

     dialog.execute(); 
    } 

    CheckPreferences cp = new CheckPreferences(this, new CheckPreferences.CheckPreferencesListener() 
    { 

     public void onSettingsSaved() 
     { 
      // This function let's the activity know that the user has saved their preferences and 
      // that the rest of the app should be now be shown. 
      check.saveSettings();    
     } 

     public void onCancel() 
     { 
      Toast.makeText(getApplicationContext(), "Settings dialog cancelled", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    cp.show(); 
} 

、私がいない私は、私が手にエラーが言うので、私は間違ってそれを呼び出すかもしれないと思います私はそれを間違って呼んでいるのか、私が完全に間違って見ているのか分かりません。クラスは以下の通りである:私は上記

package shc_BalloonSat.namespace; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.view.View; 
import android.widget.CheckBox; 

public class CheckPreferences extends Dialog 
{ 
Context shc; 
private CheckBox altitudeCheckBox = (CheckBox) findViewById(R.id.altitudeCheckbox); 
private CheckBox latitudeCheckbox = (CheckBox) findViewById(R.id.latitudeCheckbox); 
private CheckBox longitudeCheckbox = (CheckBox) findViewById(R.id.longitudeCheckbox); 
private CheckBox velocityCheckbox = (CheckBox) findViewById(R.id.velocityCheckbox); 
private CheckPreferencesListener listener; 
SharedPreferences pref; 
Editor prefEditor; 
String userAltitudePreference; 
String userLatitudePreference; 
String userLongitudePreference; 
String userVelocityPreference; 
String userAltitudeChoice; 
String userLatitudeChoice; 
String userLongitudeChoice; 
String userVelocityChoice; 

public interface CheckPreferencesListener 
{ 
public void onSettingsSaved(); 
public void onCancel(); 
} 

public CheckPreferences(Context context, CheckPreferencesListener l) 
{ 
super(context); 
this.setContentView(R.layout.custompreferences); 
this.setCancelable(false); 
this.setCanceledOnTouchOutside(false); 
this.setTitle("Data View Settings"); 
pref = getSharedPreferences("shared_prefs", 1); 
prefEditor = pref.edit(); 
initOnClick(); 
} 

private void initOnClick() 
{ 
View.OnClickListener click = new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 
    switch (v.getId()) 
    { 
      case R.id.saveBtn: 
      { 
       saveSettings(); 
       listener.onSettingsSaved(); 
       dismiss(); 
       break; 
      } 

      case R.id.cancelBtn: 
      { 
       listener.onCancel(); 
       dismiss(); 
       break; 
      } 
    } 
    } 
}; 

    // Save Button 
    this.findViewById(R.id.saveBtn).setOnClickListener(click); 

    // Cancel Button 
    this.findViewById(R.id.cancelBtn).setOnClickListener(click); 
} 

public void saveSettings() 
{ 
// This function is called when the user chooses the save their preferences 

if (altitudeCheckBox.isChecked()) 
{ 
    userAltitudeChoice = "true"; 
    prefEditor.putString(userAltitudePreference, userAltitudeChoice); 
    prefEditor.commit(); 
} 

else if (latitudeCheckbox.isChecked()) 
{ 
    userLatitudeChoice = "true"; 
    prefEditor.putString(userLatitudePreference, userLatitudeChoice); 
    prefEditor.commit(); 
} 

else if (longitudeCheckbox.isChecked()) 
{ 
    userLongitudeChoice = "true"; 
    prefEditor.putString(userLongitudePreference, userLongitudeChoice); 
    prefEditor.commit(); 
} 

else if (velocityCheckbox.isChecked()) 
{ 
    userVelocityChoice = "true"; 
    prefEditor.putString(userVelocityPreference, userVelocityChoice); 
    prefEditor.commit(); 
} 

else 
{ 

} 

} 
} 

エラーは、この行で発生:

pref = getSharedPreferences("shared_prefs", 1); 

任意の助けを大幅に理解されるであろう。私は何が間違っているのか知りたいです。

答えて

2

このメソッドは、参照変数contextで呼び出す必要があります。

public CheckPreferences(Context context, CheckPreferencesListener l) 
{ 
super(context); 
shc=context; 
... 
pref = shc.getSharedPreferences("shared_prefs", 1); 
... 
} 
0

Dialogクラスには、getSharedPreferencesメソッドが定義されていません。

getContext().getSharedPreferences(...) 
4

ofcourse SharedPreferencesは複数のクラスにわたって同じです。これを使用すると、アプリケーション内の永続的なキーと値のペアのプリミティブデータ型を保存および取得できます。

標準的なプラクティスは、各タイプのキーと値のペアを保存して取得するすべての静的メソッドを持つヘルパークラスを1つ持つことです。また、すべてのキーを1つの静的クラスSharedPreferenceKeysに入れます。それは愚かな印刷ミスを避ける。

package com.mobisys.android; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.preference.PreferenceManager; 

public class HelperSharedPreferences { 

    public static class SharedPreferencesKeys{ 
     public static final String key1="key1"; 
     public static final String key2="key2"; 
    } 

    public static void putSharedPreferencesInt(Context context, String key, int value){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     Editor edit=preferences.edit(); 
     edit.putInt(key, value); 
     edit.commit(); 
    } 

    public static void putSharedPreferencesBoolean(Context context, String key, boolean val){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     Editor edit=preferences.edit(); 
     edit.putBoolean(key, val); 
     edit.commit(); 
    } 

    public static void putSharedPreferencesString(Context context, String key, String val){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     Editor edit=preferences.edit(); 
     edit.putString(key, val); 
     edit.commit(); 
    } 

    public static void putSharedPreferencesFloat(Context context, String key, float val){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     Editor edit=preferences.edit(); 
     edit.putFloat(key, val); 
     edit.commit(); 
    } 

    public static void putSharedPreferencesLong(Context context, String key, long val){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     Editor edit=preferences.edit(); 
     edit.putLong(key, val); 
     edit.commit(); 
    } 

    public static long getSharedPreferencesLong(Context context, String key, long _default){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getLong(key, _default); 
    } 

    public static float getSharedPreferencesFloat(Context context, String key, float _default){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getFloat(key, _default); 
    } 

    public static String getSharedPreferencesString(Context context, String key, String _default){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getString(key, _default); 
    } 

    public static int getSharedPreferencesInt(Context context, String key, int _default){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getInt(key, _default); 
    } 

    public static boolean getSharedPreferencesBoolean(Context context, String key, boolean _default){ 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getBoolean(key, _default); 
    } 
} 

を値(ブール値を言う)、活動からの呼び出し以下置くには:あなたが使用できるサンプルクラスで、次の

HelperSharedPreferences.putSharedPreferenceBoolean(getApplicationContext(),HelperSharedPreferences.SharedPreferenceKeys.key1, true); 

同じ値を取得するには、呼び出し以下:

HelperSharedPreferences.getSharedPreferenceBoolean(getApplicationContext(),HelperSharedPreferences.SharedPreferenceKeys.key1, true); 

最後の値はデフォルト値です。

+0

このコードを一度宣言しない理由はありますか? 'SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);'? – input

+0

あなたはクラスレベルでのことを意味しますか?そうであれば、メソッドは静的であるため動作しません –

関連する問題