保存微调器数据并进一步显示而无需再次询问

时间:2019-01-02 08:33:23

标签: android android-studio android-spinner

我对android真的很陌生,所以如果有一些非常愚蠢的错误,我深表歉意。我也搜索了有关该主题的许多答案,但没有找到合适的解决方案。

我想做的是,登录时仅接受一次用户输入,然后从下次启动应用程序起,它应直接移至下一页,而无需再次询问微调器值。

这是到目前为止的代码-

    ArrayAdapter<String> br = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, branchEnt);
    br.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    branch.setAdapter(br);
    branch.setOnItemSelectedListener(this);

    ArrayAdapter<String> yr = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, yearEnt);
    yr.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    year.setAdapter(yr);
    year.setOnItemSelectedListener(this);

    proceed.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(DetailsActivity.this,ProfileActivity.class);

            intent.putExtra("branch",String.valueOf(branch.getSelectedItem()));
            intent.putExtra("year",String.valueOf(year.getSelectedItem()));
            startActivity(intent);
        }
    });
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}  

当前,此代码传递了微调器的选定值,但是每次我启动该应用程序时,都会再次发生该活动。我不希望那样发生。输入后应保存数据,并且从第二次开始不再询问。

3 个答案:

答案 0 :(得分:1)

使用共享首选项保存数据,然后在启动时使用if语句确定用户是否需要填写数据。

答案 1 :(得分:1)

我们在android中有一个名为shared preferences的概念,您可以在其中将数据保存在应用程序中,该数据将在应用程序的所有活动中使用。要创建共享的首选项文件,请将以下代码复制到onCreate()方法上方的主类中,如下所示:

public class AboutUsActivity extends AppCompatActivity {

SharedPreferences sharedpreferences;
public static final String mypreference = "mypref";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about_us);
}
}

这将创建一个名为mypref的共享首选项文件。现在,您可以像下面那样填充键值:

sharedpreferences = this.getSharedPreferences("mypref", 0); // 0 - for private mode
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("branch", String.valueOf(branch.getSelectedItem()));
editor.putString("year", String.valueOf(year.getSelectedItem()));
editor.apply();

这会将branchyear变量存储在共享首选项文件“ mypref”中

现在,每次启动活动时,您都需要检查mypref方法中onCreate()文件中这些变量的值是否存储如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about_us);

    sharedpreferences = this.getSharedPreferences("mypref", 0);
    String branch= sharedpreferences.getString("branch", "default value");
    String year= sharedpreferences.getString("year", "default value");
}

如果branchyear包含任何值,则可以相应地编写逻辑。

您可以了解有关共享首选项here

的更多信息

希望这会有所帮助:)

编辑1:

在单击按钮的侦听器上,该按钮将以共享首选项发布数据,该数据可用于下一个活动:

Button storeDataInSP = findViewById(R.id.back);
    storeDataInSP.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sharedpreferences = this.getSharedPreferences("mypref", 0);
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("branch", String.valueOf(branch.getSelectedItem()));
            editor.putString("year", String.valueOf(year.getSelectedItem()));
            editor.apply();
        }
});

在按钮所在的活动的onCreate()中添加上述方法。另外,请确保您的微调框也位于同一活动中。

编辑2: 您的FirstActivity应该如下所示:

public class FirstActivity extends AppCompatActivity {

    SharedPreferences sharedpreferences;
    public static final String mypreference = "mypref";

    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // This will open shared preference file and load variables "year" and "branch"
        sharedpreferences = this.getSharedPreferences("mypref", 0);
        String branchstring = sharedpreferences.getString("branch", "0");
        String yearstring = sharedpreferences.getString("year", "0");

        // This will check if the variables hold data. If so, it will send the control to Secondactivity
        if ((branchstring == "0") || (yearstring == "0"){

            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
            startActivity(aboutusintent);

        } else {

            // If those variables dont have values, your FirstActivity will load
            setContentView(R.layout.activity_about_us);

        }

        // Here, you will get selected values from spinners and populate shared preference file.
        // Remember I didn't included the code to map spinners, which you need to do here. Otherwise "branch" and "year" will throw error.

        sharedpreferences = this.getSharedPreferences("mypref", 0);
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString("branch", String.valueOf(branch.getSelectedItem())); // branch is the spinner
        editor.putString("year", String.valueOf(year.getSelectedItem())); // year is the spinner
        editor.apply();
}

}

答案 2 :(得分:0)

这里是一种简单的方法,您可以在Spind中将数据保存到SharedPreferences中。 以下代码会将微调器中的值保存到共享的首选项中

SharedPreferences sharedpreferences = getSharedPreferences("PREFERENCES", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("branch", String.valueOf(branch.getSelectedItem()));
editor.putString("year", String.valueOf(year.getSelectedItem()));
editor.commit();

要在任何其他活动上显示来自sharedpreferences的值,只需执行以下操作:

SharedPreferences sharedpreferences = getSharedPreferences("PREFERENCES",MODE_PRIVATE);
String branch = sharedpreferences.getString("branch","");
String year = sharedpreferences.getString("year","");

这将简单地将您的值放在字符串分支和年份中,您可以使用setText在任何地方打印。无需任何复杂的东西。只需分别使用这两组代码来保存和加载首选项,就可以完成。希望这对您有所帮助。祝你好运:)