在android studio中尝试使用gson保存arraylist时出错

kg7wmglp  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(418)

在我正在编程的android应用程序中,我试图使用gson库保存带有自定义对象的arraylist。如果我称之为

  1. private void saveData(){
  2. SharedPreferences sharedPreferences = getSharedPreferences("shared preferences",MODE_PRIVATE);
  3. SharedPreferences.Editor editor = sharedPreferences.edit();
  4. Gson gson = new Gson();
  5. String json = gson.toJson(recipe_items);
  6. editor.putString("task list",json);
  7. editor.apply();
  8. }

保存功能,我的应用程序崩溃,并显示以下错误消息:

  1. E/AndroidRuntime: FATAL EXCEPTION: main
  2. Process: com.yzcorp.kochapp, PID: 19949
  3. java.lang.IllegalArgumentException: class com.samsung.android.directpeninput.PopupCue$CueContainer declares multiple JSON fields named mContext
  4. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:172)
  5. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  6. at com.google.gson.Gson.getAdapter(Gson.java:458)
  7. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  8. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  9. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  10. at com.google.gson.Gson.getAdapter(Gson.java:458)
  11. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  12. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  13. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  14. at com.google.gson.Gson.getAdapter(Gson.java:458)
  15. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  16. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  17. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  18. at com.google.gson.Gson.getAdapter(Gson.java:458)
  19. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  20. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  21. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  22. at com.google.gson.Gson.getAdapter(Gson.java:458)
  23. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
  24. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
  25. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
  26. at com.google.gson.Gson.getAdapter(Gson.java:458)
  27. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:56)
  28. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
  29. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
  30. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
  31. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
  32. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
  33. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
  34. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
  35. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
  36. at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107)
  37. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
  38. at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
  39. at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
  40. at com.google.gson.Gson.toJson(Gson.java:704)
  41. at com.google.gson.Gson.toJson(Gson.java:683)
  42. E/AndroidRuntime: at com.google.gson.Gson.toJson(Gson.java:638)
  43. at com.google.gson.Gson.toJson(Gson.java:618)
  44. at com.yzcorp.kochapp.Recipescroll.saveData(Recipescroll.java:227)
  45. at com.yzcorp.kochapp.Recipescroll.access$200(Recipescroll.java:55)
  46. at com.yzcorp.kochapp.Recipescroll$1$3.onCancel(Recipescroll.java:158)
  47. at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1589)
  48. at android.os.Handler.dispatchMessage(Handler.java:106)
  49. at android.os.Looper.loop(Looper.java:214)
  50. at android.app.ActivityThread.main(ActivityThread.java:7156)
  51. at java.lang.reflect.Method.invoke(Native Method)
  52. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
  53. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

RecipeCroll是我的主要活动类,recipe_items是带有自定义对象的arraylist。
这是保存在arraylist中的类

  1. public class recipe_item {
  2. private Drawable mImageResource;
  3. private String time;
  4. private String title;
  5. private String manual;
  6. private ArrayList<Ingredient> ingredients;
  7. public recipe_item(Drawable ImageResource,String time1, String title1,String manual1 , ArrayList<Ingredient> ingredients1){
  8. mImageResource = ImageResource;
  9. time = time1;
  10. title = title1;
  11. manual = manual1;
  12. ingredients = ingredients1;
  13. }
  14. public Drawable getmImageResource(){
  15. return mImageResource;
  16. }
  17. public String getTime(){
  18. return time;
  19. }
  20. public String getTitle(){
  21. return title;
  22. }
  23. public String getManual() { return manual; }
  24. public ArrayList<Ingredient> getIngredients() {
  25. return ingredients;
  26. }

}
我已经试过了
将所有对话框字段设置为 transient
使用排除策略跳过名为mcontext的字段,但它只会给我带来更多错误
我不能做什么
更改popupcue类的代码,因为它是随android提供的
(sry表示英语不好,我很乐意回答)
我在网上找到了什么
这可能就是我正在处理的类:https://github.com/fonix232/scoverre/blob/master/reversed/framework/com/samsung/android/directpeninput/popupcue.java

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题