我需要在共享首选项中加载并保存网站及其语言。当我退出然后打开应用程序时,保存的网站和语言加载。我用过各种方法,但无法实现。有String
和int
彼此不兼容。 我的简单代码是这样的:
private SharedPreferences prefs;
private static final String SELECTED_ITEM = "SelectedItem";
private SharedPreferences.Editor sharedPrefEditor;
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
else if (id == R.id.web)
final CharSequence[] items={"English","Arabic","Russian"};
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle("Choose Website");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {}
});
builder.setSingleChoiceItems(items, getSelectedItem(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
webView = (WebView) findViewById(R.id.webView);
int website=current_page;
if("English".equals(items[which]))
{
webView.loadUrl("https://english.com");
website=("https://english.com");
}
else if("Arabic".equals(items[which]))
{
webView.loadUrl("https://arabic.com");
website=("https://arabic.com");
}
else if("Russian".equals(items[which]))
{
webView.loadUrl("https://russian.com");
website=("https://russian.com");
}
saveSelectedItem(website);
}
});
builder.show();
}
private int getSelectedItem() {
if (prefs == null) {
prefs = PreferenceManager
.getDefaultSharedPreferences(this);
}
return prefs.getInt(SELECTED_ITEM, -1);
}
private void saveSelectedItem(int which) {
if (prefs == null) {
prefs = PreferenceManager
.getDefaultSharedPreferences(this);
}
sharedPrefEditor = prefs.edit();
sharedPrefEditor.putInt(SELECTED_ITEM, which);
sharedPrefEditor.commit();
}
为什么要将字符串设置为 int 变量(网站(
您可能应该将语言另存为首选项(字符串(。 然后,当您加载应用程序时,请阅读语言首选项并从那里确定网站。
如下所示。
public String getWebsite(){
SharedPreferences prefs;
if (prefs == null) {
prefs = PreferenceManager
.getDefaultSharedPreferences(this);
}
String language = prefs.getString("Language", "English");
String website = "";
switch(language){
case "Russian":
website = "russian.com";
break;
default:
website = "english.com";
}
return website;
}
private void saveSelectedItem(String language) {
if (prefs == null) {
prefs = PreferenceManager
.getDefaultSharedPreferences(this);
}
sharedPrefEditor = prefs.edit();
sharedPrefEditor.putInt("language", language);
sharedPrefEditor.commit();
}
当您调用保存所选项目时,只需传入项目[哪个]而不是哪个
in saveSelectedItem(website);
您正在传递一个字符串,并且该方法需要 int
private void saveSelectedItem(int which) {
if (prefs == null) {
prefs = PreferenceManager
.getDefaultSharedPreferences(this);
}
sharedPrefEditor = prefs.edit();
sharedPrefEditor.putInt(SELECTED_ITEM, which);
sharedPrefEditor.commit();
用于将数据保存在共享首选项中我建议使用GSON例如,我建议制作一个类
public class WebsiteData
{
@SerializedName("lang")
@Expose
private String lang ;
@SerializedName("website")
@Expose
private String website;
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang= lang;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website= website;
}
}
当用户选择语言时,创建新对象并使用所选语言设置语言,并使用相应的值设置网站然后通过 gson 将对象转换为字符串,如下所示:
Gson gson = new Gson();
String dataToSave = gson.toJson(WebsiteData);
String loadedString = getUserData(context);
WebsiteData loadedData = gson.fromJson(loadedString, WebsiteData.class);
要保存和加载数据,请使用以下方法:
public void saveUserData(Context context, String data) {
SharedPreferences sharedpreferences;
sharedpreferences = context.getSharedPreferences(PREF, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(DATA_KEY, data);
editor.apply();
}
public String getUserData(Context context) {
SharedPreferences sharedpreferences = context.getSharedPreferences(PREF, Context.MODE_PRIVATE);
return sharedpreferences.getString(DATA_KEY, null);
}