将ArrayList <pendingintent>存储到SharedPreferences </pendingintent>中

时间:2013-09-07 09:53:03

标签: android arraylist sharedpreferences android-pendingintent

我无法找到问题的答案所以我决定发一个问题。问题很简单。

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

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

3 个答案:

答案 0 :(得分:0)

FAILURE是使用PendingIntentgetActivity()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)

来自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 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可能对您有帮助。