共享首选项 If/Else 语句在我强制关闭应用程序时无法正常工作



问题摘要:当我通过打开任务窗口并滑动关闭它来强制关闭应用程序时,我的 if/else 语句无法正常工作。 我将名称选择活动作为默认启动器活动。 名称选择活动应仅在没有共享首选项时弹出,这意味着用户尚未从微调器中选择名称。 但是,即使用户选择了一个名称并将其存储在共享首选项中,当我强制关闭应用程序时,我仍然会返回到名称选择活动

我尝试过的东西我已经尝试if (stringNamePackage.equals(""))if (stringNamePackage == "")if (NAME.equals(""))if (NAME == "")起初我以为这是因为我的共享首选项没有正确保存名称,但事实并非如此,当我强制关闭它时,名称仍然正确显示。 但是当我尝试添加 if/else 语句时,它总是只会将我发送回名称选择活动,无论我是否在共享首选项中保存了名称。 我花了 4 个小时试图让它工作,我已经到了智慧的尽头。我还花了几个小时查看有关如何保存和检索共享 Pref 数据的不同堆栈文章。 我什至尝试了如何检查共享首选项字符串是空的还是空的*android,但它仍然无法正常工作。

名称选择活动

public class NameSelection extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
Spinner nameSpinner;
String stringNamePackage;
Button bSaveSelection;
Context context;
public ArrayAdapter<CharSequence> adapter;
public static String SHARED_PREFS = "sharedPrefs";
public static String NAME = "name";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_name_selection);
context = this;
nameSpinner = findViewById(R.id.horizonNameSpinner);
stringNamePackage = "";
//Create the list to populate the spinner
List<String> nameList = new ArrayList<>();
nameList.add("01");
nameList.add("02");
nameList.add("03");
//Array Adapter for creating list
//adapter = ArrayAdapter.createFromResource(this, R.array., android.R.layout.simple_spinner_item);
adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, nameList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
nameSpinner.setAdapter(adapter);
nameSpinner.setOnItemSelectedListener(this);
//If User has not selected name, start this activity to allow user to pick Name, else, send user to Main Activity
//else start MainActivity
if (stringNamePackage .equals("")) {
Toast.makeText(this, "Welcome, please select Name", Toast.LENGTH_LONG).show();
} else {
Intent sendToMainActIntent = new Intent(this, MainActivity.class);
startActivity(sendToMainActIntent);
}

//Save Selection Button Code
bSaveSelection = findViewById(R.id.bSaveSelection);
bSaveSelection.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), MainActivity.class);
//Saves name to SharedPrefs
saveName();
//Sends user to MainActivity
startActivity(myIntent);
finish();
}
});

}

//Stores name selected in SharedPreferences
public void saveName() {
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = app_preferences.edit();
editor.clear();
//Stores selection in stringNamePackage 
editor.putString(NAME, stringNamePackage );
editor.commit();
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//Put user selection into String text
String text = adapterView.getItemAtPosition(i).toString();
stringNamePackage = text;
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}

}

主要活动 此活动案例的目的是在用户点击"测试"按钮时将用户发送回名称选择屏幕,该按钮将删除共享首选项,从而触发 if/else 语句并让用户选择一个名称。 这是我在主活动中获取和设置名称的方式:

在创建中

获取名称

SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(context);
nameSharedPref = app_preferences.getString(NAME, "");
name.setText(nameSharedPref);

清算名称

SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = mPrefs.edit();
editor.clear();
editor.commit();
finish();

我的期望:我希望用户在第一次启动应用程序时必须选择一个名称。 然后,每次他们打开应用程序时,if/else 语句都会检查用户在共享首选项中是否有名称。 如果他们有名字,他们将直接进入主活动。 如果他们不这样做,那么他们将返回到名称选择活动。

要获取数据并将数据存储到您的SharedPreferences,请使用以下内容:

SharedPreferences sharedPreferences = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);

PreferenceManager.getDefaultSharedPreferences(context)用于构建"设置"屏幕或类似屏幕,第一个使用它来存储/检索不一定绑定到 UI 的任意数据。

如果你想组织你的SharedPreferences你可以附加到getPackageName()不同的键,比如:

getSharedPreferences(getPackageName() + ".booleans", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".flags", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".keys", Context.MODE_PRIVATE);

它们中的每一个都是存储共享首选项的不同文件,您可以省略前面的点.,但为了命名一致性,最好保留它,实际上不需要额外的键,但是如果您有某种强迫症,那可能是"放松";-(。

然后,您可以使用Android Studio的设备资源管理器浏览共享首选项,它们位于"数据/数据/your.package.name/shared_prefs"下

最新更新