将数组列表保存在共享首选项中
save arraylist in shared preference
我将值存储在 ArrayList
中并将其传递给 using bundle 到下一个 Fragment
,然后我将值设置为我的 TextView
,直到这里工作正常,现在转到另一个页面并继续应用程序并再次返回 Fragment
,我的所有数据都消失了,所以我试图将其存储在首选项中但首选项不允许访问 ArrayList
,以下是我的代码
public class Add_to_cart extends Fragment {
private Button continue_shopping;
private Button checkout;
ListView list;
private TextView _decrease,mBTIncrement,_value;
private CustomListAdapter adapter;
private ArrayList<String> alst;
private ArrayList<String> alstimg;
private ArrayList<String> alstprc;
private String bname;
private ArrayList<String> alsttitle;
private ArrayList<String> alsttype;
public static ArrayList<String> static_Alst;
public Add_to_cart(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.list_view_addtocart, container, false);
alst=new ArrayList<String>();
alstimg=new ArrayList<String>();
Bundle bundle = this.getArguments();
alst = bundle.getStringArrayList("prducts_id");
alsttype = bundle.getStringArrayList("prducts_type");
alstimg=bundle.getStringArrayList("prducts_imgs");
alsttitle=bundle.getStringArrayList("prducts_title");
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
System.out.println("TEst--" + alst);
// Toast.makeText(getActivity(),"Testing"+alstimg,Toast.LENGTH_LONG).show();
list=(ListView)rootView.findViewById(R.id.list_addtocart);
adapter = new CustomListAdapter(getActivity(),alst,alstimg,alsttitle,alsttype);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
// TODO Auto-generated method stub
}
});
return rootView;
}
public class CustomListAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> listData;
private ArrayList<String> listDataimg;
private ArrayList<String> listDatatitle;
private ArrayList<String> listDatatype;
private AQuery aQuery;
String dollars="\u0024";
public CustomListAdapter(Context context,ArrayList<String> listData,ArrayList<String> listDataimg,ArrayList<String> listDatatitle,ArrayList<String> listDatatype) {
this.context = context;
this.listData=listData;
this.listDataimg=listDataimg;
this.listDatatitle=listDatatitle;
this.listDatatype=listDatatype;
aQuery = new AQuery(this.context);
}
public void save_User_To_Shared_Prefs(Context context) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(listData);
Add_to_cart.static_Alst=listData;
prefsEditor.putString("user", json);
prefsEditor.commit();
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.list_item_addtocart, null);
holder.propic = (ImageView) convertView.findViewById(R.id.img_addtocart);
holder.txtproname = (TextView) convertView.findViewById(R.id.proname_addtocart);
holder.txtprofilecast = (TextView) convertView.findViewById(R.id.proprice_addtocart);
holder.txtsize = (TextView) convertView.findViewById(R.id.txt_size);
_decrease = (TextView) convertView.findViewById(R.id.minuss_addtocart);
mBTIncrement = (TextView) convertView.findViewById(R.id.plus_addtocart);
_value = (EditText)convertView.findViewById(R.id.edt_procount_addtocart);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
mBTIncrement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
increment();
}
});
_decrease.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
decrement();
}
});
holder.txtprofilecast.setText(dollars+listData.get(position));
holder.txtproname.setText(listDatatitle.get(position));
holder.txtsize.setText(listDatatype.get(position));
System.out.println("Image ka array " + listDataimg.get(position));
//Picasso.with(mContext).load(mThumbIds[position]).centerCrop().into(imageView);
// Picasso.with(context).load(listDataimg.get(position)).into(holder.propic);
aQuery.id(holder.propic).image(listDataimg.get(position), true, true, 0, R.drawable.ic_launcher);
return convertView;
}
class ViewHolder{
ImageView propic;
TextView txtproname;
TextView txtprofilecast;
TextView txtsize;
}
}
}
首先从下面link下载Gson.jar
,然后将其添加到项目的libs
文件夹
http://www.java2s.com/Code/Jar/g/Downloadgson17jar.htm
然后将那个 ArrayList
放入 Class 并创建那个 class 的对象然后你可以将该对象保存到 SharedPreferences
如下
public static void save_User_To_Shared_Prefs(Context context, User _USER) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(_USER);
prefsEditor.putString("user", json);
prefsEditor.commit();
}
以上代码是一个示例_USER objext 包含 ArrayList
.
要读取对象请看下面的代码
public static User get_User_From_Shared_Prefs(Context context) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("user", "");
User user = gson.fromJson(json, User.class);
return user;
}
现在,当您想要获取 _USER 对象时,请调用上述函数,结果您将拥有该对象,并且您将拥有 ArrayList
使用tinydb。查看以下 link 您可能会有所了解。
https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo
使用 tinydb 可以将数组存储在本地数据库中。
另一种解决方案(刚刚想到的):
如果您有一个名为 addtos
的数组,并且您想要将该数组添加到共享首选项,因为该变量在字典中表示为字符串,您可以将数组索引附加到该数组的末尾字符串.
例如 -
存储
for(int i = 0; i<addtos.size(); i++)
prefsEditor.putString("addtos"+i, addtos.get(i));
接收
int i = 0;
while(true){
if(prefs.getString("addtos"+i, "")!=""){ // or whatever the default dict value is
// do something with it
i++;
}else{break;}
}
我觉得没问题,如果有人发现这方面的问题,请告诉我。
此外,不需要 ArrayLists
你可以使用 gson:
保存首选项:
public void save_User_To_Shared_Prefs(Context context, List<User> users) {
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonUsers = gson.toJson(users);
editor.putString(USERS, jsonUsers);
editor.commit();
}
获取首选项:
public ArrayList<User> getUsers(Context context) {
SharedPreferences settings;
List<User> users;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if (settings.contains(USERS)) {
String jsonUsers = settings.getString(USERS, null);
Gson gson = new Gson();
User[] userItems = gson.fromJson(jsonUsers,
User[].class);
users = Arrays.asList(userItems);
users= new ArrayList<User>(users);
} else
return null;
return (ArrayList<User>) users;
}
添加用户:
public void addUser(Context context, User user) {
List<Product> favorites = getUsers(context);
if (users == null)
users = new ArrayList<User>();
users.add(user);
save_User_To_Shared_Prefs(context, users);
}
在 sharedpreference 中存储和检索数组列表的完整示例:http://blog.nkdroidsolutions.com/arraylist-in-sharedpreferences/
public void storeFavorites(Context context, List favorites) {
// used for store arrayList in json format
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public ArrayList loadFavorites(Context context) {
// used for retrieving arraylist from json formatted string
SharedPreferences settings;
List favorites;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
BeanSampleList[] favoriteItems = gson.fromJson(jsonFavorites,BeanSampleList[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList(favorites);
} else
return null;
return (ArrayList) favorites;
}
public void addFavorite(Context context, BeanSampleList beanSampleList) {
List favorites = loadFavorites(context);
if (favorites == null)
favorites = new ArrayList();
favorites.add(beanSampleList);
storeFavorites(context, favorites);
}
public void removeFavorite(Context context, BeanSampleList beanSampleList) {
ArrayList favorites = loadFavorites(context);
if (favorites != null) {
favorites.remove(beanSampleList);
storeFavorites(context, favorites);
}
}
我将值存储在 ArrayList
中并将其传递给 using bundle 到下一个 Fragment
,然后我将值设置为我的 TextView
,直到这里工作正常,现在转到另一个页面并继续应用程序并再次返回 Fragment
,我的所有数据都消失了,所以我试图将其存储在首选项中但首选项不允许访问 ArrayList
,以下是我的代码
public class Add_to_cart extends Fragment {
private Button continue_shopping;
private Button checkout;
ListView list;
private TextView _decrease,mBTIncrement,_value;
private CustomListAdapter adapter;
private ArrayList<String> alst;
private ArrayList<String> alstimg;
private ArrayList<String> alstprc;
private String bname;
private ArrayList<String> alsttitle;
private ArrayList<String> alsttype;
public static ArrayList<String> static_Alst;
public Add_to_cart(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.list_view_addtocart, container, false);
alst=new ArrayList<String>();
alstimg=new ArrayList<String>();
Bundle bundle = this.getArguments();
alst = bundle.getStringArrayList("prducts_id");
alsttype = bundle.getStringArrayList("prducts_type");
alstimg=bundle.getStringArrayList("prducts_imgs");
alsttitle=bundle.getStringArrayList("prducts_title");
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
System.out.println("TEst--" + alst);
// Toast.makeText(getActivity(),"Testing"+alstimg,Toast.LENGTH_LONG).show();
list=(ListView)rootView.findViewById(R.id.list_addtocart);
adapter = new CustomListAdapter(getActivity(),alst,alstimg,alsttitle,alsttype);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
// TODO Auto-generated method stub
}
});
return rootView;
}
public class CustomListAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> listData;
private ArrayList<String> listDataimg;
private ArrayList<String> listDatatitle;
private ArrayList<String> listDatatype;
private AQuery aQuery;
String dollars="\u0024";
public CustomListAdapter(Context context,ArrayList<String> listData,ArrayList<String> listDataimg,ArrayList<String> listDatatitle,ArrayList<String> listDatatype) {
this.context = context;
this.listData=listData;
this.listDataimg=listDataimg;
this.listDatatitle=listDatatitle;
this.listDatatype=listDatatype;
aQuery = new AQuery(this.context);
}
public void save_User_To_Shared_Prefs(Context context) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(listData);
Add_to_cart.static_Alst=listData;
prefsEditor.putString("user", json);
prefsEditor.commit();
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.list_item_addtocart, null);
holder.propic = (ImageView) convertView.findViewById(R.id.img_addtocart);
holder.txtproname = (TextView) convertView.findViewById(R.id.proname_addtocart);
holder.txtprofilecast = (TextView) convertView.findViewById(R.id.proprice_addtocart);
holder.txtsize = (TextView) convertView.findViewById(R.id.txt_size);
_decrease = (TextView) convertView.findViewById(R.id.minuss_addtocart);
mBTIncrement = (TextView) convertView.findViewById(R.id.plus_addtocart);
_value = (EditText)convertView.findViewById(R.id.edt_procount_addtocart);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
mBTIncrement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
increment();
}
});
_decrease.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
decrement();
}
});
holder.txtprofilecast.setText(dollars+listData.get(position));
holder.txtproname.setText(listDatatitle.get(position));
holder.txtsize.setText(listDatatype.get(position));
System.out.println("Image ka array " + listDataimg.get(position));
//Picasso.with(mContext).load(mThumbIds[position]).centerCrop().into(imageView);
// Picasso.with(context).load(listDataimg.get(position)).into(holder.propic);
aQuery.id(holder.propic).image(listDataimg.get(position), true, true, 0, R.drawable.ic_launcher);
return convertView;
}
class ViewHolder{
ImageView propic;
TextView txtproname;
TextView txtprofilecast;
TextView txtsize;
}
}
}
首先从下面link下载Gson.jar
,然后将其添加到项目的libs
文件夹
http://www.java2s.com/Code/Jar/g/Downloadgson17jar.htm
然后将那个 ArrayList
放入 Class 并创建那个 class 的对象然后你可以将该对象保存到 SharedPreferences
如下
public static void save_User_To_Shared_Prefs(Context context, User _USER) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(_USER);
prefsEditor.putString("user", json);
prefsEditor.commit();
}
以上代码是一个示例_USER objext 包含 ArrayList
.
要读取对象请看下面的代码
public static User get_User_From_Shared_Prefs(Context context) {
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(context.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("user", "");
User user = gson.fromJson(json, User.class);
return user;
}
现在,当您想要获取 _USER 对象时,请调用上述函数,结果您将拥有该对象,并且您将拥有 ArrayList
使用tinydb。查看以下 link 您可能会有所了解。 https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo
使用 tinydb 可以将数组存储在本地数据库中。
另一种解决方案(刚刚想到的):
如果您有一个名为 addtos
的数组,并且您想要将该数组添加到共享首选项,因为该变量在字典中表示为字符串,您可以将数组索引附加到该数组的末尾字符串.
例如 -
存储
for(int i = 0; i<addtos.size(); i++)
prefsEditor.putString("addtos"+i, addtos.get(i));
接收
int i = 0;
while(true){
if(prefs.getString("addtos"+i, "")!=""){ // or whatever the default dict value is
// do something with it
i++;
}else{break;}
}
我觉得没问题,如果有人发现这方面的问题,请告诉我。
此外,不需要 ArrayLists
你可以使用 gson:
保存首选项:
public void save_User_To_Shared_Prefs(Context context, List<User> users) {
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonUsers = gson.toJson(users);
editor.putString(USERS, jsonUsers);
editor.commit();
}
获取首选项:
public ArrayList<User> getUsers(Context context) {
SharedPreferences settings;
List<User> users;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if (settings.contains(USERS)) {
String jsonUsers = settings.getString(USERS, null);
Gson gson = new Gson();
User[] userItems = gson.fromJson(jsonUsers,
User[].class);
users = Arrays.asList(userItems);
users= new ArrayList<User>(users);
} else
return null;
return (ArrayList<User>) users;
}
添加用户:
public void addUser(Context context, User user) {
List<Product> favorites = getUsers(context);
if (users == null)
users = new ArrayList<User>();
users.add(user);
save_User_To_Shared_Prefs(context, users);
}
在 sharedpreference 中存储和检索数组列表的完整示例:http://blog.nkdroidsolutions.com/arraylist-in-sharedpreferences/
public void storeFavorites(Context context, List favorites) {
// used for store arrayList in json format
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public ArrayList loadFavorites(Context context) {
// used for retrieving arraylist from json formatted string
SharedPreferences settings;
List favorites;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
BeanSampleList[] favoriteItems = gson.fromJson(jsonFavorites,BeanSampleList[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList(favorites);
} else
return null;
return (ArrayList) favorites;
}
public void addFavorite(Context context, BeanSampleList beanSampleList) {
List favorites = loadFavorites(context);
if (favorites == null)
favorites = new ArrayList();
favorites.add(beanSampleList);
storeFavorites(context, favorites);
}
public void removeFavorite(Context context, BeanSampleList beanSampleList) {
ArrayList favorites = loadFavorites(context);
if (favorites != null) {
favorites.remove(beanSampleList);
storeFavorites(context, favorites);
}
}