Как получить данные из локального 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 не могу.