2016-10-20 5 views
2

Ich habe eine Methode, die über das Einstellungsmenü ausgeführt wird, um die verschiedenen Sprachen auszuwählen. Ich möchte dies in einer SharedPreferences-Datei speichern, aber ich bekomme ständig Fehler ohne Erklärung. Wenn ich auf OK klicke, wird die App normal fortgesetzt, aber die ausgewählten Sprachen werden nicht gespeichert.Gespeicherte Einstellungen speichern unter Einstellungen

Die Methode:

static String langSet = ""; 
static SharedPreferences languageSettings; 
static SharedPreferences.Editor editLang; 


    public static void updateResources(Context context, String language) { 
     Locale locale = new Locale(language); 
     Locale.setDefault(locale); 

     Resources resources = context.getResources(); 

     Configuration configuration = resources.getConfiguration(); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
      configuration.setLocale(locale); 
     } else { 
      configuration.locale = locale; 
     } 

     resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 
    } 

onCreate:

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

     //LocaleHelper.onCreate(this, "es"); 

     languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE); 
     editLang = languageSettings.edit(); 


     if (langSet != ""){ 

      langSet = languageSettings.getString("lang", ""); 
      updateResources(this, langSet); 

     } 
startButton = (Button) findViewById(R.id.startButton); 

     startButton.setOnClickListener(new AdapterView.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intent = new Intent(getApplicationContext(), Main2Activity.class); 
       //intent.putExtra("name", friends.get(i)); 
       startActivity(intent); 

      } 
     }); 
} 

onCreateOptionsMenu:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_main, menu); 

     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     if (id == R.id.english) { // IMPORT THE MENU.XML FOLDER 

      languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE); 
      editLang.putString("lang", "en"); 
      editLang.apply(); 
      langSet = languageSettings.getString("lang", ""); 

      updateResources(this, langSet); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      //intent.putExtra("name", friends.get(i)); 
      startActivity(intent); 


     } 
     else if (id == R.id.afrikaans) { 

      languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE); 
      editLang.putString("lang", "af"); 
      editLang.apply(); 
      langSet = languageSettings.getString("lang", ""); 

      updateResources(this, langSet); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      //intent.putExtra("name", friends.get(i)); 
      startActivity(intent); 

     } 
     else if (id == R.id.spanish) { 

      languageSettings = getSharedPreferences("languages", Context.MODE_PRIVATE); 
      editLang.putString("lang", "es"); 
      editLang.apply(); 
      langSet = languageSettings.getString("lang", ""); 

      updateResources(this, langSet); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      //intent.putExtra("name", friends.get(i)); 
      startActivity(intent); 

     } 

     return super.onOptionsItemSelected(item); 
    } 

Bitte unterstützen. Danke

+0

Veröffentlichen Sie das Fehlerprotokoll. – fluffyBatman

+1

Übrigens, vergleichen Sie Strings nicht mit == oder =! operator.Verwenden Sie die Methode .equals(): if (langSet! = "") sollte if sein (! langSet.equals ("")) –

Antwort

2

Vor ein paar Jahren ist es bei mir passiert. Der Fehler war, als ich den sharedPreferenceType änderte.

Zum Beispiel, wenn Sie editLang.putString("lang", "en"); zu editLang.putInt("lang", 1); ändern und nur die Anwendung installieren, wird es plötzlich nicht funktionieren, weil Sie den gleichen Schlüssel für verschiedene Arten von Wert verwendet haben.

Um mein Problem zu lösen, war es notwendig, die gesamte Anwendung manuell vom Gerät zu deinstallieren, bevor Sie es installieren.

Also, mein Vorschlag ist entweder versucht die Anwendung deinstallieren oder in Android-Gerät Anwendungsdetails gehen und klar Ihre App-Daten vor dieser Art von Veränderung. Natürlich, wenn die Anwendung in Produktion ist, würde ich empfehlen, den Namen des Schlüssels zu ändern, wenn Sie den Werttyp ändern möchten.

+2

Eine vollständige Deinstallation war nicht erforderlich. Es würde ausreichen, um Einstellungen -> Anwendungen zu erhalten und dann Ihre App-Daten zu löschen. –

+0

@MarcinOrlowski danke. Behoben. – Paulo

Verwandte Themen