Сохранение позиции или значения счетчика с использованием общих настроек - PullRequest
0 голосов
/ 30 декабря 2018

Я в своем классе Fragment, у которого есть счетчик, содержащий локали ... для преобразования текста в речь

    mylocale = localeList.get(position);
    textToSpeech.setLanguage(mylocale);
    spinnerposition = Integer.valueOf(String.valueOf(localeList.get(position)));

Я хочу сохранить позицию, используя sharedpreferences Это то, что я пытаюсь:

 public void savepos(){
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt(POSITION , spinnerposition);
    editor.apply();
}

я объявил позицию счетчика как глобальную переменную

int spinnerposition;

вот как я получаю позицию:

public void saveposload(){
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    int position = sharedPreferences.getInt(POSITION ,1);

    mspinner.setSelection(sharedPreferences.getInt(POSITION, position));
}

но я не могу это сделать, приложение вылетаетпомогите пожалуйста

вот исключение из журнала

2018-12-30 15:13:49.904 3611-3611/my.uapp.com E/AndroidRuntime: FATAL EXCEPTION: main
Process: my.uapp.com, PID: 3611
java.lang.NumberFormatException: For input string: "it_IT"
    at java.lang.Integer.parseInt(Integer.java:521)
    at java.lang.Integer.valueOf(Integer.java:611)
    at my.uapp.com.Tab0$override.onItemSelected(Tab0.java:363)
    at my.uapp.com.Tab0$override.access$dispatch(Tab0.java)
    at my.uapp.com.Tab0.onItemSelected(Tab0.java)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:931)
    at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920)
    at android.widget.AdapterView.-wrap1(AdapterView.java)
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Попробуйте ниже:

    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
         mylocale = localeList.get(position);
         textToSpeech.setLanguage(mylocale);
         savpos(position);
    }

    public void savepos(int position) {
        sharedPreferences = this.getActivity().getSharedPreferences("stored_position", Context.MODE_PRIVATE)
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt("pos" , position).apply;
     }

   public void saveposload(){
      sharedPreferences = this.getActivity().getSharedPreferences("stored_position", Context.MODE_PRIVATE)
      int position = sharedPreferences.getInt("pos",0);  //zero being the default value
      mspinner.setSelection(position);
    }

установите точку останова на saveposload () и проверьте, правильно ли получена позиция или сейчас.и куда вы звоните saveposload()

И вам не нужно хранить позицию в private Spinner firstSpinner;

0 голосов
/ 30 декабря 2018

Является ли localeList списком, в котором вы храните все локали, например "it_IT" и т. Д.?Если это так, то это:

localeList.get(position)

- это String , и он не может быть проанализирован до int с этой строкой:

spinnerposition = Integer.valueOf(String.valueOf(localeList.get(position)));

Может быть, вам нужно только это:

public void saveposload(){
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
    mspinner.setSelection(sharedPreferences.getInt(POSITION, 0));
}

Убедитесь, что вы звоните saveposload() после установки адаптера.

...