0

と の 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;
    }
4

1 に答える 1