我在我當前的應用程序中爲我的數據模型創建了custom deserializer
,並且在我的CustomDeserializer
中試圖初始化Pair<>
時遇到一些問題。我從我的Json我的項目A和B收回,他們都很好,並從JsonObject
正確初始化,但是當我要與他們建立一個new Pair<>(A,B)
我發現了一個例外:無法初始化Gson自定義解串器中的Android.Util.Pair
方法拋出「的java.lang .RuntimeException'異常。不能評價android.util.Pair.toString()
我一直在尋找更多的人有同樣的問題,但我不能找到有關這個任何提示,我不知道爲什麼我不能初始化項目裏面的deserializer
。我在junit
測試中執行了我的所有代碼,所以也許是由於這個原因造成的,但我不知道爲什麼。這裏是我的deserializer
的代碼:
public class CustomSetDeserializer implements JsonDeserializer<ExerciseSet> {
private List<Exercise> exerciseList;
public CustomSetDeserializer(List<Exercise> exerciseList) {
this.exerciseList = exerciseList;
}
@Override
public ExerciseSet deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<Pair<Exercise, Integer>> setExercises = new ArrayList<>();
JsonArray exercisesJsonArray = json.getAsJsonObject().get("exercises").getAsJsonArray();
for (JsonElement jsonElement : exercisesJsonArray) {
String name = jsonElement.getAsJsonObject().get("name").getAsString();
int reps = jsonElement.getAsJsonObject().get("reps").getAsInt();
Exercise exercise = getExercise(name);
setExercises.add(new Pair<>(exercise, reps));
}
int exercisesPerRound = json.getAsJsonObject().get("exercisesPerRound").getAsInt();
int restBetweenRounds = json.getAsJsonObject().get("restBetweenRounds").getAsInt();
ExerciseSet set;
switch (exercisesPerRound) {
case 3:
//TODO TRISET
set = new SimpleSet(setExercises, restBetweenRounds);
break;
case 2:
//TODO SUPERSET
set = new SimpleSet(setExercises, restBetweenRounds);
break;
default:
set = new SimpleSet(setExercises, restBetweenRounds);
break;
}
return set;
}
private Exercise getExercise(String name){
for (Exercise exercise : exerciseList) {
if (!exercise.name().equals(name)) continue;
return exercise;
}
throw new IllegalArgumentException("Wrong exercise name");
}
}
,這裏是我的測試:
@Test
public void read_set_json() {
CustomSetDeserializer customSetDeserializer = new CustomSetDeserializer(exercises);
Gson gson = new GsonBuilder().registerTypeAdapter(ExerciseSet.class, customSetDeserializer).enableComplexMapKeySerialization().create();
ExerciseSet set = gson.fromJson(setExample, ExerciseSet.class);
assertThat(set.exercises().get(0).first.equals(exercise), is(true));
assertThat(set.exercises().get(0).second.equals(12), is(true));
assertThat(set.rounds(), is(4));
assertThat(set.restBetweenRound(), is(60L));
}
如果調試我的代碼一切工作正常,但Pair<>
永遠不會創建的,所以我總是檢索List
全null Pair<>
。
希望有人能夠幫我一把!