android - Saving the spinner position or value using Shared Preference
问题描述
I am in my Fragment class which has spinner that contains locales..for text to speech
mylocale = localeList.get(position);
textToSpeech.setLanguage(mylocale);
spinnerposition = Integer.valueOf(String.valueOf(localeList.get(position)));
i want to save the position using sharedpreferences
this is what i am trying:
public void savepos(){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(POSITION , spinnerposition);
editor.apply();
}
i have declared spinner position as Global variable
int spinnerposition;
here's how i retrieve the position:
public void saveposload(){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
int position = sharedPreferences.getInt(POSITION ,1);
mspinner.setSelection(sharedPreferences.getInt(POSITION, position));
}
but i am not able to do so, app crashes please help
heres the exception from log
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)
解决方案
您localeList
存储所有语言环境的列表,例如"it_IT"
等?
如果是这种情况,那么:
localeList.get(position)
是一个字符串,它不能用这一行解析为int :
spinnerposition = Integer.valueOf(String.valueOf(localeList.get(position)));
也许你只需要这个:
public void saveposload(){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
mspinner.setSelection(sharedPreferences.getInt(POSITION, 0));
}
确保saveposload()
在设置适配器后调用。
推荐阅读
- reactjs - React 重构 componentDidMount() 调用函数
- php - 如何让dropzone拖放在mac上工作
- javascript - Async.waterfall:已经在 node.js 上调用了回调
- python - 如何在pandas中迭代数据框的一列,不能按数字选择列
- android - 从 R.attr 参考返回颜色资源 id 的 Android 测试方法
- c++ - 覆盖虚拟方法的级联调用
- sql - 通过纬度和经度加入 2 个 oracle 表
- azure-active-directory - 如何为所有租户预配 Microsoft Teams 多租户应用
- mysql - 在mysql中加入两个具有特定条件的表
- python - TF2 中的 export_saved_model 是否也保存权重?