我找不到我的问题的答案,所以我决定发布一个问题。问题很简单。
如何存储ArrayList<PendingIntent>
into SharedPreferences
?最好的方法是什么,我必须使用某种方法Serialization
吗?
提前感谢您,任何建议都会很棒!
我找不到我的问题的答案,所以我决定发布一个问题。问题很简单。
如何存储ArrayList<PendingIntent>
into SharedPreferences
?最好的方法是什么,我必须使用某种方法Serialization
吗?
提前感谢您,任何建议都会很棒!
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()
恢复方法Intent
)。
PendingIntent
实现Parcelable
。您需要遍历您的ArrayList
并将每个PendingIntent
转换为String
. 然后,您可以将所有单独String
的 s 连接成一个String
(每个之间有一些分隔符)。然后将结果String
写入SharedPreferences
.
您可以将 aParcelable
转换为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
现在通过使用 base64 编码(或任何其他机制,例如将每个字节转换为 2 个十六进制数字)将其转换byte[]
为 a 。String
要使用 base64,您可以这样做:
String base64String = Base64.encodeToString(bytes, Base64.NO_WRAP | Base64.NO_PADDING);
请参阅如何在 Parcel 的帮助下将 Parcelable 编组和解组为字节数组?有关如何转换 a 和反之亦然的更多Parcelable
信息byte[]
。
//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 中
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();
从 sharedpreference 中检索 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));
}
编辑
我不确定,但这可能会对您有所帮助。