【发布时间】:2017-11-09 22:14:30
【问题描述】:
我正在尝试将列表数据保存在首选项中
List<AppGrid> mArrayProducts = new ArrayList<AppGrid>();
Gson gson = new Gson();
String jsonObject = gson.toJson(mArrayProducts);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("MyObject", jsonObject);
editor.commit();
Intent intent = new Intent(InstalledAppActivity.this,MainActivity.class);
startActivity(intent);
AppGrid.java
private String dataDir;
private Drawable icon;
private String id;
private String name;
private String launcherName;
private String packageName;
private int pageIndex;
private int position;
private boolean sysApp;
public boolean selected;
public AppGrid() {
}
public AppGrid(Drawable icon, String title, String packageName) {
this.icon = icon;
this.name = title;
this.packageName = packageName;
}
protected AppGrid(Parcel in) {
name = in.readString();
packageName = in.readString();
selected = in.readByte() != 0;
}
public String getDataDir() {
return this.dataDir;
}
public Drawable getIcon() {
return this.icon;
}
public String getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String getPackageName() {
return this.packageName;
}
public int getPageIndex() {
return this.pageIndex;
}
public int getPosition() {
return this.position;
}
public void setDataDir(String paramString) {
this.dataDir = paramString;
}
public void setIcon(Drawable paramDrawable) {
this.icon = paramDrawable;
}
public void setId(String paramString) {
this.id = paramString;
}
public void setName(String paramString) {
this.name = paramString;
}
public void setPackageName(String paramString) {
this.packageName = paramString;
}
public void setPageIndex(int paramInt) {
this.pageIndex = paramInt;
}
public void setPosition(int paramInt) {
this.position = paramInt;
}
public String toString() {
return "AppGrid [packageName=" + this.packageName + ", name=" + this.name + ", icon=" + this.icon + ", dataDir=" + this.dataDir + "]";
}
public boolean isSysApp() {
return sysApp;
}
public void setSysApp(boolean sysApp) {
this.sysApp = sysApp;
}
public String getLauncherName() {
return launcherName;
}
public void setLauncherName(String launcherName) {
this.launcherName = launcherName;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(packageName);
/* Bitmap bitmap = (Bitmap)((BitmapDrawable) icon ).getBitmap();
parcel.writeParcelable(bitmap, i);*/
parcel.writeByte((byte) (selected ? 1 : 0));
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public static final Creator<AppGrid> CREATOR = new Creator<AppGrid>() {
@Override
public AppGrid createFromParcel(Parcel in) {
return new AppGrid(in);
}
@Override
public AppGrid[] newArray(int size) {
return new AppGrid[size];
}
};
}
数据未保存在共享首选项中。您能帮帮我吗
Logcat:
D/Error: ERR: stack=java.lang.OutOfMemoryError: 无法分配一个 16 字节分配,4194272 空闲字节和 4MB 直到 OOM;失败的 由于碎片(需要连续的空闲 4096 字节来获取新的 缓冲区,其中最大的连续空闲 0 字节)
【问题讨论】:
-
列表的大小是多少?
-
AppGrid 类包含什么类型的数据?
-
我已经添加了 AppGrid.calss ,你能找到吗
-
我认为你正在保存 Drawable,所以你得到了 OutOfMemory Eexcption。尝试将图像路径保存在 Sharedpreference 而不是图像中。
标签: android android-activity gson sharedpreferences