我有两个班级Settings
和MainActivity
。我正在尝试从Settings
类的MainActivity
类中创建一个微调器的选定项。
我在sharedpreferences
活动中使用Settings
来保存活动关闭时所选的微调器值。这很有效。
要在MainActivity中使用“设置”活动获取值,请使用
public static Settings getlang = new Settings();
和
getlang.getLang1().getItemAtPosition(getlang.getLang1().getSelectedItemPosition());
getLang1()
是我在Settings活动中创建的一种方法,它返回Spinner本身。
问题是,如果我尝试这样做而不首先打开Settings活动并直接进入MainActivity,我会在此行获得NullPointerException
getlang.getLang1().getItemAtPosition(getlang.getLang1().getSelectedItemPosition());
但如果我首先打开Settings
活动,然后转到MainActivity
,一切正常。
我该如何解决这个问题?
以下是Settings
活动
public class Settings extends Activity {
public SharedPreferences prefsSet;
public String prefNameSet = "MyPrefSet";
public static final String PREFS_NAME_SET = "SAVEDATASET";
private static final String SPINNER1_STATE = "spinner1_state";
public int language;
public int userChoice;
private static Spinner spinner1;
private Button savesett;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
savesett = (Button) findViewById(R.id.bSaveSett);
spinner1 = (Spinner) findViewById(R.id.spinner1);
SharedPreferences sharedPref = getSharedPreferences("FileName",
MODE_PRIVATE);
int spinnerValue = sharedPref.getInt("userChoiceSpinner", -1);
if (spinnerValue != -1)
// set the value of the spinner
spinner1.setSelection(spinnerValue);
spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// TODO Auto-generated method stub
userChoice = spinner1.getSelectedItemPosition();
SharedPreferences sharedPref = getSharedPreferences("FileName",
0);
SharedPreferences.Editor prefEditor = sharedPref.edit();
prefEditor.putInt("userChoiceSpinner", userChoice);
prefEditor.commit();
Toast.makeText(
parent.getContext(),
"Chosen Language: "
+ parent.getItemAtPosition(pos).toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
savesett.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent ourIntent = new Intent(Settings.this, MainActivity.class);
startActivity(ourIntent);
}
});
}
public int getLang() {
return userChoice;}
public Spinner getLang1() {
return Settings.spinner1;
}
答案 0 :(得分:0)
问题是“设置”活动可能会也可能不会实例化。鉴于它是您尝试使用它的主要活动,它很可能永远不会。
您要做的是在首选项中保留微调器的值,而不是微调器项的索引。
考虑用户能够使用微调器的情况,该微调器选择他们希望应用程序检查服务的频率。微调器的选择是“1分钟”,“5分钟”,“10分钟”,“15分钟”,“30分钟”,“1小时”。
保存首选项后,我们将节省1,5,10,15,30或60.
使用此信息的活动将返回一个int,该int对应于刷新之间应等待的分钟数。