我一直在尝试使用android偏好活动,我已经完成了所有设置,但实际上检索用户首选项时遇到了问题。具体来说,它是两个edittext首选项,字段长度和年份长度,我想要检索as int的值,以便我可以在另一个活动的计算中使用它们。我不知道如何使用android偏好活动
我发现的每个例子都不一样,我也找不到明确的解释。我将在后面发布该类和我正在使用的方法,我知道那里的代码是不正确的,但我觉得我现在已经搞乱了它,并且无法弄清楚它。这条线特别是我不相信是正确的:SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
,我并不真正了解偏好活动作为一个整体,他们似乎并没有像我期望的那样工作。任何建议真的会很棒!我一直在玩弄相同的代码行数日。
谢谢。
我的喜好的活动是这样的:
package com.geistware.studentbudgetapp;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.text.method.DigitsKeyListener;
import android.util.Log;
public class UserPrefs extends PreferenceActivity {
public int termLength = 1;
public int yearLength = 1;
@Override //OnCreate never runs, why?
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setup);
EditTextPreference usersTermLength =(EditTextPreference)
findPreference(getString(R.string.term_length_set)); //finds
//the edittext box by its key, term_length_set
usersTermLength.getEditText().setKeyListener(DigitsKeyListener.
getInstance()); //DigitsKeyListener only allows digits to be typed in
Log.v("UserPrefs", "UsersTermLength: " + usersTermLength);
EditTextPreference usersYearLength =(EditTextPreference)
findPreference(getString(R.string.year_length_set));
usersYearLength.getEditText().setKeyListener(DigitsKeyListener.
getInstance());
}
}
,我希望能够在这个方法来检索用户termLength和yearLength(为整数):
public float alterForFrequency(float enteredAmount, String spinnerPosition){
//get user preferences (not working)
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String termKey = getString(R.string.term_length_set, "");
String yearKey = getString(R.string.year_length_set, "");
int termLength = prefs.getInt(termKey, 1);
int yearLength = prefs.getInt(yearKey, 1);
Log.v("alterForFrequency", "userprefs: " + termLength + yearLength);
//perform calculations for monthly/temly/yearly
if(spinnerPosition.equals("Monthly")){
usersAmount = ((enteredAmount/31)* 7);
Log.v("FiscFreq", "revisingAmount=" + usersAmount);
}
else if(spinnerPosition.equals("Termly")){
usersAmount = (enteredAmount/termLength);
Log.v("FiscFreq", "revisingAmount=" + usersAmount);
}
else if(spinnerPosition.equals("Yearly")){
usersAmount = (enteredAmount/yearLength);
}
else{
usersAmount = enteredAmount;
}
currencyRevisedAmount = toCurrency(usersAmount); //drops the unwanted digits
return currencyRevisedAmount;
}
实际上,我创建一个FiscalFrequency实例来在名为Keypad的活动中使用alterForFrequency,如下所示:
public class Keypad extends Activity { .....
public float reviseOnSpinnerPos(){
enteredAmount = Float.valueOf(userAmount.getText().toString());
FiscalFrequency ff = new FiscalFrequency();
revisedAmount = ff.alterForFrequency(enteredAmount, spinnerPosition);
return revisedAmount;
}
}
在从pref中读取偏好之后发生了什么问题或错误? – Janusz 2011-01-26 10:43:14
@Janusz:以及在上面设置的代码,我在`SharedPreferences Prefs = ..`行中得到了这个错误:类型PreferenceManager中的方法getDefaultSharedPreferences(Context)不适用于参数(FiscalFrequency)。还有getString方法来获取xml editText键,由于某种原因未定义。如果我把所有东西都打乱了(把所有东西都放在UserPrefs中,让我的其他类扩展它来访问变量,我得到一个NumberFormatException。 – Holly 2011-01-26 11:35:35