と の 2 つのクラスがSettings
ありMainActivity
ます。クラスで作成されたスピナーの選択項目をSettings
クラスから取得しようとしていMainActivity
ます。
sharedpreferences
アクティビティ内で使用してSettings
、アクティビティが閉じたときに選択したスピナーの値を保存しました。これは機能します。
MainActivity で設定アクティビティから値を取得するには、使用します
public static Settings getlang = new Settings();
と
getlang.getLang1().getItemAtPosition(getlang.getLang1().getSelectedItemPosition());
getLang1()
スピナー自体を返す設定アクティビティで作成したメソッドです。
問題は、最初に設定アクティビティを開かずにこれを実行しようとすると、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;
}