GSON получить для вложенных объектов

71
7

Я борюсь с каким-то Гсоном и не смог найти ответ на то, что я ищу. Надеюсь, я не создаю дубликат.

В принципе, у меня есть класс оружия, среди которого есть подкласс боеприпасов. Однако не все оружие имеет боеприпасы, то есть гранаты.

Класс оружия выглядит следующим образом:

public class Weapon_gson implements Serializable {

private ArrayList<String> Attachments, BuyFrom, Footer;
private String Description, MainImage, Name, Icon, Notes;

private Ammunition Ammunition;
private GeneralData GeneralData;
private Looting Looting;
private Performance Performance;

public Weapon_gson(ArrayList<String> attachments, ArrayList<String> buyFrom, ArrayList<String> footer, String description, String mainImage, String name, String icon, String notes, Weapon_gson.Ammunition ammunition, Weapon_gson.GeneralData generalData, Weapon_gson.Looting looting, Weapon_gson.Performance performance) {
Attachments = attachments;
BuyFrom = buyFrom;
Footer = footer;
Description = description;
MainImage = mainImage;
Name = name;
Icon = icon;
Notes = notes;

Ammunition = ammunition;
GeneralData = generalData;
Looting = looting;
Performance = performance;
}

private class Ammunition {
ArrayList<String> AcceptedAmmunition;
String Caliber, DefaultAmmo, DefaultMag, MuzzleVelocity;

}

public String getCaliber() {
return Ammunition.Caliber;
}

}

и я использую Gson для загрузки данных

    Gson gson = new GsonBuilder().create();
Type collectionType = new TypeToken<Collection<Weapon_gson>>(){}.getType();

ArrayList<Weapon_gson> TempWeaponArray = new ArrayList<>();

// Read file in stream mode
try (JsonReader reader = new JsonReader(in)) {
reader.beginArray();
while (reader.hasNext()) {
// Read data into object model
Weapon_gson weapon = gson.fromJson(reader, Weapon_gson.class);
TempWeaponArray.add(weapon);
}
}
return TempWeaponArray;

Это возвращает объекты оружия правильно, и я могу получить калибр, если данные json содержат Ammunition.Caliber. Однако, если json не содержит боеприпасов, боеприпасы будут нулевыми, а вызов калибра не удастся.

Попытка прочитать из поля 'java.lang.String uk.co.design2dev.escapefromtarkov.Weapons.Weapon_gson $ Ammunition.Caliber' по ссылке нулевого объекта

Глядя в отладчик, показано, что Ammunition имеет значение null, поэтому я понимаю, почему он не может получить калибр, но я просто не уверен, как лучше справиться с этим?

Позже, когда я использую адаптер для заполнения recyclerview, я хочу скрыть текст caliber textview, если он недоступен, но я не уверен, как это сделать.

    if(currentWeapon.getCaliber() == null){
holder.weapon_calibler_tv.setVisibility(View.GONE);
}else{
holder.weapon_calibler_tv.setVisibility(View.VISIBLE);
holder.weapon_calibler_tv.setText(currentWeapon.getCaliber());
}

Кроме того, мне нужен конструктор, если я работаю с Gson таким образом? Любые предложения будут высоко оценены.

заранее спасибо

спросил(а) 2018-08-19T18:44:00+03:00 2 года, 2 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема