2012-05-01 2 views
2

하나의 클래스에서 현재 작동하지만 두 번째 클래스에서는 작동하지 않는 SharedPreferences가 있습니다. 내가 오류는 말한다 때문에 내가, 내가 잘못을 호출 할 수 있다고 생각 :여러 클래스에서 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는 여러 클래스에서 동일합니다. 이를 통해 응용 프로그램에서 원시 데이터 유형의 영구 키 - 값 쌍을 저장하고 검색 할 수 있습니다.

표준적인 방법은 모든 유형의 키 - 값 쌍을 저장하고 검색하는 모든 정적 메서드가있는 단일 Helper 클래스를 사용하는 것입니다. 또한 하나의 정적 클래스 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

수업 수준에서 가르치시겠습니까? 그렇다면 메서드가 정적이기 때문에 작동하지 않습니다. –