转换JsonString到自定义的Java的ArrayList [英] Convert JsonString to a custom java ArrayList
问题描述
我qestion是,我怎么能转换成一个保存的Json斯汀回到一个ArrayList的定制
My qestion is, how I can convert an saved Json Sting back to an custom ArrayList.
这是我如何保存我的ArrayList
This is how I save my ArrayList:
public void saveLocList(ArrayList<LocItem> locList) {
SharedPreferences.Editor e = returnPref.edit();
Gson gson = new Gson();
String json = gson.toJson(locList);
e.putString(LOCLIST, json);
e.commit();
}
而现在,当我恢复的ArrayList(JSON字符串),它不会与此code工作:
And now, when I restore the ArrayList (Json String) it doesn't work with this code:
public ArrayList<LocItem> getLocList() {
String json = returnPref.getString(LOCLIST, "");
Type type = (Type) new TypeToken<ArrayList<LocItem>>() {
}.getType();
ArrayList<LocItem> inpList = new Gson().fromJson(json, (java.lang.reflect.Type) type);
return inpList;
}
这是我的日志:
12-30 22:19:19.395: E/AndroidRuntime(2254): FATAL EXCEPTION: main
12-30 22:19:19.395: E/AndroidRuntime(2254): java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackagename.MainActivity}: java.lang.ClassCastException: com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl cannot be cast to android.renderscript.Type
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread.access$600(ActivityThread.java:153)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.os.Handler.dispatchMessage(Handler.java:99)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.os.Looper.loop(Looper.java:137)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread.main(ActivityThread.java:5289)
12-30 22:19:19.395: E/AndroidRuntime(2254): at java.lang.reflect.Method.invokeNative(Native Method)
12-30 22:19:19.395: E/AndroidRuntime(2254): at java.lang.reflect.Method.invoke(Method.java:525)
12-30 22:19:19.395: E/AndroidRuntime(2254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
12-30 22:19:19.395: E/AndroidRuntime(2254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
12-30 22:19:19.395: E/AndroidRuntime(2254): at dalvik.system.NativeStart.main(Native Method)
12-30 22:19:19.395: E/AndroidRuntime(2254): Caused by: java.lang.ClassCastException: com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl cannot be cast to android.renderscript.Type
12-30 22:19:19.395: E/AndroidRuntime(2254): at mypackagename.helper.Preferences.getLocList(Preferences.java:152)
12-30 22:19:19.395: E/AndroidRuntime(2254): at mypackagename.MainActivity.onCreate(MainActivity.java:137)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.Activity.performCreate(Activity.java:5133)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-30 22:19:19.395: E/AndroidRuntime(2254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293)
12-30 22:19:19.395: E/AndroidRuntime(2254): ... 11 more
我不知道是什么改变,也许有与savingformat问题(但它工作);
I don't know what to change, maybe there is a problem with the savingformat (but it works);
感谢
推荐答案
该错误信息是告诉你它与铸造一个问题。
The error message is telling you it's a problem with casting.
TypeToken.getType()
返回类 ParameterizedTypeImpl
,它实现了的java对象.lang.reflect.Type
。
但是,因为我假设你有 android.renderscript.Type
,爪哇正试图施放 ParameterizedTypeImpl一个import语句的
到 android.renderscript.Type
。
However, because of an import statement that I'm assuming you have for android.renderscript.Type
, Java is trying to cast the ParameterizedTypeImpl
to an android.renderscript.Type
.
简单修复import语句或使用完全限定域名( java.lang.reflect.Type
)为你做了code更高版本。
Simply fix the import statement or use the fully qualified name (java.lang.reflect.Type
) as you do later in the code.
这篇关于转换JsonString到自定义的Java的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!