在警报对话框中选择网站及其语言并保存



我需要在共享首选项中加载并保存网站及其语言。当我退出然后打开应用程序时,保存的网站和语言加载。我用过各种方法,但无法实现。有Stringint彼此不兼容。 我的简单代码是这样的:

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

最新更新