java - Android Studio Gson 到内部存储

标签 java android gson internal-storage

您好,我是 Android Studio 的初学者,我在将对象保存到文件时遇到问题。

首先,我使用 Gson 库将对象“Appdata”转换为 JSON 字符串,然后保存该字符串 在文件 Appdata.txt

这是我的InternalStorage.java类

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);
    }

这里我使用MainActivity中的Appdata。 (我认为没有必要发布所有 3 个类(class))

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

问题是更改未保存。

最佳答案

据我所知,您是 Android 开发的初学者,而不仅仅是 Android studio 的初学者。不要将 Activity 设置为单例。关于这个问题。如果你只想保存一个对象,android 提供一个 SharedPreferences https://developer.android.com/training/data-storage/shared-preferences

但是如果您确实需要创建一个文件,我认为您只是忘记了访问权限。

关于java - Android Studio Gson 到内部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60449852/

相关文章:

java - 从 java PDFBOX 获取违规行为

java - sip软电话对等点源代码运行

java - 为什么 Android 的进度对话框中没有取消按钮?

java - 如何使用 Java 中的 Gson 库遍历具有多个根元素的 JSON 文件?

java - GSON 应为 BEGIN_ARRAY 但在第 1 行错误为 STRING

java - 如何将整数列表从 Clojure 传递给 Frege 函数?

java - 如果文件已存在于 Dropbox 中,如何覆盖该文件?

Android: float 操作按钮以透明背景显示

android - 如何在电子邮件中附加图像文件?

android - 使用 GSON 将 JSON 转换为嵌套对象(通用对象)