I am saving my arraylist of custom model into shared preference using Gson
Storing code:
ArrayList<DownloadProgressDataModel> arrayList = getArrayListFromPref(downloadProgressDataModel);
SharedPreferences.Editor prefsEditor = getSharedPreferences("APPLICATION_PREF", MODE_PRIVATE).edit();
Gson gson = new Gson();
String json = gson.toJson(arrayList);
prefsEditor.putString("DownloadManagerList", json);
prefsEditor.apply();
}
Retrieving
ArrayList<DownloadProgressDataModel> arrayList;
Gson gson = new Gson();
SharedPreferences mPrefs = getSharedPreferences("APPLICATION_PREF", MODE_PRIVATE);
String json = mPrefs.getString("DownloadManagerList", "");
if (json.isEmpty()) {
arrayList = new ArrayList<DownloadProgressDataModel>();
} else {
Type uriPath = new TypeToken<ArrayList<DownloadProgressDataModel>>() {
}.getType();
arrayList = gson.fromJson(json, uriPath); <------ Error line
}
But on the error line I'm getting: can't instantiate class android.net.Uri
Model
public class DownloadProgressDataModel {
private Uri uriPath;
private long referenceId;
public Uri getUriPath() {
return uriPath;
}
public void setUriPath(Uri uriPath) {
this.uriPath = uriPath;
}
public long getReferenceId() {
return referenceId;
}
public void setReferenceId(long referenceId) {
this.referenceId = referenceId;
}
}
Uri class constructor is private and it's an abstract class. Gson tries to create a new object for the Uri class using Reflection API(We can't create an object for abstract class). So simple solution is to change the uriPath into String instead of Uri.
private String uriPath;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With