我一直试图找出应用关闭后保存字符串数组的最佳方法,并在再次打开时检索相同的字符串信息。上下文是我已经弄清楚如何从网站解析数据并将其存储在字符串数组中,但是我希望能够在用户没有Internet访问权限的情况下保存字符串数组字符串数组可以被检索。
这是在java中的android工作室中完成的 - 只是做得很清楚
我一直在研究共享优先方法,但没有一个有效的解决方案。如果有人可以帮助我,我将不胜感激!
让我们说字符串数组是:
String[] webValues = new String[(this value can be very large)];
我希望存储整个字符串数组并检索整个字符串数组,然后能够通过活动中的特定索引调用数组。
答案 0 :(得分:0)
我认为SharedPreferences
不允许您编写数组,因此您必须使用putString
函数单独编写每个值,或者在API级别11或更高版本中使用{ {1}}用于保存putStringSet
个字符串,但如果您将Set
转换为Array
,则会删除所有重复项。我建议你的情况是使用索引作为键单独存储每个字符串,所以这样的东西应该可以用来保存数据
Set
并加载数组
public boolean saveArray(String[] array, String arrayName, Context mContext) {
SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(arrayName +"_size", array.length);
for(int i=0;i<array.length;i++)
editor.putString(arrayName + "_" + i, array[i]);
return editor.commit();
}
取自Is it possible to add an array or object to SharedPreferences on Android
的帖子https://stackoverflow.com/users/833622/sherif-elkhatib答案 1 :(得分:0)
使用ArrayList而不是String数组,更容易。
然后将你的arraylist转换为Set并使用它:
import React from 'react'
import { shallow, mount } from "enzyme"
import { MemoryRouter, withRouter } from 'react-router-dom'
import { authenticationRequired } from './AuthenticationHOC'
import createRouterContext from 'react-router-test-context'
import sinon from 'sinon'
// dummy component to be wrapped during tests
class WrappedComponent extends React.Component {
render() {
return <div>WrappedComponent</div>
}
}
describe('AuthenticationHOC', () => {
describe('authenticationRequired', () => {
let props;
const context = createRouterContext();
const renderedMount = () => {
return mount( authenticationRequired(<WrappedComponent {...props} />), { context } )
}
const spy = sinon.spy(authenticationRequired(<WrappedComponent {...props} />).prototype, 'componentWillReceiveProps');
it('renders the wrapped component', () => {
let wrapper = renderedMount()
expect(wrapper.contains(<WrappedComponent {...props} />)).toBe(true)
})
describe("when user_id doesn't exist", () => {
beforeEach(() => {
props = {
user_id: ''
}
});
it('should go to the login page', () => {
//how to test the method componentWillReceiveProps
let wrapper = renderedMount();
wrapper.setProps({
user_id: ''
});
//expect(wrapper.instance().props().history).toBe(1)
expect(context.router.history.location.pathname).toBe('/login');
})
})
获取值:
SharedPreferences.Editor editor = shared.edit();
Set<String> set = new HashSet<String>();
set.addAll(yourArrayList);
editor.putStringSet("values", set);
editor.apply();