我无法找到问题的答案所以我决定发一个问题。问题很简单。
如何将ArrayList<PendingIntent>
存储到SharedPreferences
?什么是最好的方法,我必须使用某种Serialization
?
提前谢谢,任何建议都会很棒!
答案 0 :(得分:0)
FAILURE
是使用PendingIntent
,getActivity()
或getBroadcast()
创建的。每个函数都有相同的参数列表:
getService()
您无法保存(Context context, int requestCode, Intent intent, @Flags int flags)
,但可以保存:
Context
的类型(即PendingIntent
,"Activity"
或"Broadcast"
)"Service"
(使用其Intent
方法返回toUri()
)因此,您可以在String
中保存代表SharedPreferences
的所有数据,不包括PendingIntent
(但Context
实例始终在您的应用中可用。)。然后,您可以轻松地从此数据中恢复已保存的Context
(使用PendingIntent
方法恢复parseUri()
)。
答案 1 :(得分:0)
PendingIntent
实施Parcelable
。您需要循环浏览ArrayList
并将每个PendingIntent
转换为String
。然后,您可以将所有单个String
连接成一个String
(每个String
之间有一些分隔符)。然后将结果SharedPreferences
写入Parcelable
。
您可以将byte[]
转换为PendingIntent pendingIntent = // Your PendingIntent here
Parcel parcel = Parcel.obtain(); // Get a Parcel from the pool
pendingIntent.writeToParcel(parcel, 0);
byte[] bytes = parcel.marshall();
parcel.recycle(); // Return the Parcel to the pool
,如下所示:
byte[]
现在使用base64编码(或任何其他机制,如将每个字节转换为2个十六进制数字)将String
转换为String base64String = Base64.encodeToString(bytes, Base64.NO_WRAP | Base64.NO_PADDING);
。要使用base64,您可以这样做:
Parcelable
有关如何将byte[]
转换为BoxShadow
的更多信息,请参阅How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?,反之亦然。
答案 2 :(得分:-2)
//suppos you have already an arraylist like this
ArrayList<String> myArrayList=new ArrayList<String>();
myArrayList.add("value1");
myArrayList.add("value2");
myArrayList.add("value3");
myArrayList.add("value4");
myArrayList.add("value5");
myArrayList.add("value6");
在共享偏好中存储arraylist
SharedPreference sPrefs=PreferenceManager.getDefaultSharedPreferences(context);
SharedPreference.Editor sEdit=sPrefs.edit();
for(int i=0;i<myArrayList.size();i++)
{
sEdit.putString("val"+i,myArrayList.get(i);
}
sEdit.putInt("size",myArrayList.size());
sEdit.commit();
从共享偏好中搜索arraylist
我正在另一个arraylist中重温价值
ArrayList<String> myAList=new ArrayList<String>();
int size=sPrefs.getInt("size",0);
for(int j=0;j<size;j++)
{
myAList.add(sPrefs.getString("val"+j));
}
修改强>
我不确定,但this可能对您有帮助。