Как получить данные из локального JSON (GSON) Android Studio

Всем добрый день! Писать о том, что я новичок - не буду!!! (хоть это и правда) Вопрос в следующем: не могу получить данные из локального (тот что лежит в папке самого приложения) JSON файла. Т.е. у меня есть несколько (пока два) TextView, которые отображают (должны) данные из JSON.

settings.json

{"settings":[{"hp":2000,"lvl":100,"money":0,"rock":100}]}

activity_main.xml

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="@string/hp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="@string/money"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView" />

<TextView
    android:id="@+id/text_hp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintStart_toEndOf="@+id/textView"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/text_money"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintStart_toEndOf="@+id/textView2"
    app:layout_constraintTop_toBottomOf="@+id/text_hp" />

Settings.java

public class Settings {
    private int hp;
    private int money;
    private int lvl;
    private int rock;

    Settings(int lvl, int hp, int money, int rock) {
        this.hp = hp;
        this.money = money;
        this.lvl = lvl;
        this.rock = rock;
    }

    public int getLvl() {
        return lvl;
    }

    public void setLvl(int lvl) {
        this.lvl = lvl;
    }

    public int getHp() {
        return hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public int getRock() {
        return rock;
    }

    public void setRock(int rock) {
        this.rock = rock;
    }

JSONHelper.java

public class JSONHelper {
    private static final String FILE_NAME = "settings.json";

    static void exportToJSON(Context context, List<Settings> dataList) {
        Gson gson = new Gson();
        DataItems dataItems = new DataItems();
        dataItems.setSettings(dataList);
        String jsonString = gson.toJson(dataItems);

        try (FileOutputStream fileOutputStream = context.openFileOutput(FILE_NAME, Context.MODE_PRIVATE)) {
            fileOutputStream.write(jsonString.getBytes(StandardCharsets.UTF_8));

        }
        catch (Exception ignored) {

        }
    }

    static List<Settings> importFromJSON(Context context) {
        try (FileInputStream fileInputStream = context.openFileInput(FILE_NAME);
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream)) {
            Gson gson = new Gson();
            DataItems dataItems = gson.fromJson(inputStreamReader, DataItems.class);
            return dataItems.getSettings();

        }
        catch (IOException ignored) {
            ignored.printStackTrace();

        }
        return null;
    }

    private static class DataItems {
        private List<Settings> settings;
        List<Settings> getSettings() {
            return settings;
        }
        void setSettings(List<Settings> settings) {
            this.settings = settings;
        }
    }

}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private List<Settings> settings;
    private static final String FILE_NAME = "settings.json";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView text_hp = findViewById(R.id.text_hp);
        TextView text_money = findViewById(R.id.text_money);

        settings = JSONHelper.importFromJSON(this); //Считываем данные из JSON

        if (settings != null) {
        //тут, как я предполагаю, будут присваиваться значения к TextView
        //text_hp.setText(значение из JSON);
        //и т.д.

        }
        else {
            addJSON();

        }
    }

    private void addJSON() {
        settings = new ArrayList<>();
        Settings settings_add = new Settings(100, 2000, 0, 100); //default
        settings.add(settings_add);
        JSONHelper.exportToJSON(this, settings);

    }
}

Повторюсь, это тренировочный код, но вопрос, я надеюсь ясен? Всю голову изломал и интернет замучил) В ListView JSON получается вывести, а вот по отдельности значения получить и присвоить их к TextView не могу.


Ответы (0 шт):