Android Studio Gson для внутреннего хранения - PullRequest
0 голосов
/ 28 февраля 2020

Здравствуйте, я новичок в Android Studio, у меня проблема с сохранением объекта в файл.

Сначала я использую библиотеку Gson, чтобы сделать объект 'Appdata' в JSON строку и я сохраняю эту строку в файле Appdata.txt

Вот мой InternalStorage. java class

package com.example.fragment.AppData.Logic;

import android.content.Context;

import com.example.fragment.UserInterface.MainActivity;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import com.google.gson.Gson;

public class InternalStorage {

    private static InternalStorage instance = null;
    private static Gson gson = new Gson();

    public boolean saveData(AppData saveData) {

        gson.toJson(saveData);
        String s = gson.toJson(saveData);

        FileOutputStream fOut = null;
        try {
            fOut = MainActivity.getInstance().getContext().openFileOutput("appdata.txt", Context.MODE_PRIVATE);
            fOut.write(s.getBytes());
            fOut.close();
        } catch (Exception e) {
           return false;
        }
        return true;
    }

    public AppData loadData() {

        FileInputStream fis = null;
        try {
            fis = MainActivity.getInstance().getContext().openFileInput("appdata.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        String line;
        while (true) {
            try {
                if (((line = bufferedReader.readLine()) != null))
                    sb.append(line+"\n");
                break;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        String s = sb.toString();
        AppData newData = null;
        try {
            newData = gson.fromJson(s, AppData.class);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return newData;
    }


}

Я использую этот метод в классе Appdata:

  public AppData loadData() {
        return internalStorage.loadData();
    }

    public boolean saveAppData() {
       return internalStorage.saveData(this);
    }

Здесь я использую Appdata в MainActivity. (Я не думаю, что необходимо публиковать все 3 класса)

  appData.loadData();
    //change something in AppData
    if(!appData.saveAppData()){
        //Inform the User about the not working Save 
    }

Проблема в том, что изменения не сохраняются.

1 Ответ

1 голос
/ 28 февраля 2020

Как я вижу, вы новичок в Android разработке, а не только в Android студии. Не делайте Активность как Синглтон. По поводу вопроса. Если вы хотите просто сохранить объект android, предоставьте SharedPreferences https://developer.android.com/training/data-storage/shared-preferences

Но если вам действительно нужно создать файл, я думаю, вы просто забыли получить доступ к разрешениям.

...