繁体   English   中英

我如何获得另一类微调器的价值? (获取NullPointerException)

[英]How do I get the value of a Spinner of another class? (Getting NullPointerException)

我有两个类SettingsMainActivity 我想从MainActivity类中获取在Settings类中创建的微调器的选定项。

当活动关闭时,我在Settings活动中使用了sharedpreferences来保存选定的微调器值。 这可行。

为了在MainActivity中从Settings活动中获取值,我使用

public static Settings getlang = new Settings();

getlang.getLang1().getItemAtPosition(getlang.getLang1().getSelectedItemPosition());

getLang1()是我在“设置”活动中创建的方法,该方法返回Spinner本身。

问题是,如果我尝试执行此操作而没有先打开“设置”活动并直接进入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;
    }

问题是“设置”活动可能会或可能不会实例化。 鉴于尝试使用它的是您的主要活动,因此很可能永远不会使用它。

您要做的是在您的首选项中保留微调器的值,而不是微调器项的索引。

考虑用户能够使用微调器的情况,该微调器选择他们希望应用检查服务的频率。 旋转器选项为“ 1分钟”,“ 5分钟”,“ 10分钟”,“ 15分钟”,“ 30分钟”,“ 1小时”。

保存首选项后,我们将保存1、5、10、15、30或60。

使用此信息的活动将只返回一个int,该int与其在两次刷新之间应等待的分钟数相对应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM