2

我找不到我的问题的答案,所以我决定发布一个问题。问题很简单。

如何存储ArrayList<PendingIntent>into SharedPreferences?最好的方法是什么,我必须使用某种方法Serialization吗?

提前感谢您,任何建议都会很棒!

4

3 回答 3

0

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)。

于 2016-07-08T18:44:43.903 回答
0

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[]

于 2018-04-01T16:15:25.200 回答
-2

来自AndroidSolution4u

//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));
 }

编辑

我不确定,但这可能会对您有所帮助。

于 2013-09-07T10:02:42.923 回答