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

Saving spinner data and displaying it further without asking again

我是 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) {

}  

目前此代码传递微调器的选定值,但每次启动应用程序时 activity 都会重新出现。我不希望这种情况发生。数据应在输入后保存,而不是从第二次询问。

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

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

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();

这将在共享首选项文件 'mypref'

中存储 branchyear 变量

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

@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 :

点击按钮的侦听器后,post 共享首选项中的数据将可供下一个 activity:

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();
        }
});

在你的按钮所在的activity的onCreate()中添加上面的方法。还要确保您的微调器也位于相同的 activity.

编辑 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();
}

}

这是一种简单的方法,您可以通过这种方法将来自微调器的数据保存在 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();

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

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

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