ANDROID:如何将JSON数据保存在文件中并检索它?

时间:2020-11-30 16:48:02

I'm new to android so please help me out. I am trying to save my ToDoList in a file so that the next time I open it, all the items are reloaded

我是android的新手,所以请帮帮我。我试图将我的ToDoList保存在一个文件中,以便下次打开它时,重新加载所有项目

This is the code I have so far,

这是我到目前为止的代码,

MainActivity.java

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
gson = new Gson();
    try {
        BufferedReader br = new BufferedReader(new FileReader("storage.json"));
        Entry e = gson.fromJson(br, Entry.class);
        Log.d("reading", e.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }}

@Override
protected void onStop() {
    super.onStop();
    json = gson.toJson(mEntries);
    Log.d("jsondata", json);
    try {
        file1 = new FileWriter("storage.json");
        file1.write(json);
        file1.flush();
        file1.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

Entry.java

Entry.java

public class Entry {
String S;
boolean b;

public Entry(String S, boolean b) {
    this.S = S;
    this.b = b;
}

public String getS() {
    return S;
}

public void setS(String S) {
    this.S = S;
}

public void setB(boolean b) {
    this.b = b;
}

public boolean isB() {
    return b;
}

}

}

How do I proceed from here? In onCreate() I would like to check if the file exists and if yes, import data from file and display on screen.

我该怎么从这里开始?在onCreate()中,我想检查文件是否存在,如果是,则从文件导入数据并在屏幕上显示。

1 个解决方案

#1


4  

Every android app has its own internal storage only that app can access, you can read from there or write to it.

每个Android应用程序都有自己的内部存储空间,只有该应用程序可以访问,您可以从那里读取或写入它。

In you case, you first want to check if you such file exist before creating one.

在您的情况下,您首先要在创建此文件之前检查是否存在此类文件。

  private String read(Context context, String fileName) {
    try {
        FileInputStream fis = context.openFileInput(fileName);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }
        return sb.toString();
    } catch (FileNotFoundException fileNotFound) {
        return null;
    } catch (IOException ioException) {
        return null;
    }
}

private boolean create(Context context, String fileName, String jsonString){
    String FILENAME = "storage.json";
    try {
        FileOutputStream fos = openFileOutput(fileName,Context.MODE_PRIVATE);
        if (jsonString != null) {
            fos.write(jsonString.getBytes());
        }
        fos.close();
        return true;
    } catch (FileNotFoundException fileNotFound) {
        return false;
    } catch (IOException ioException) {
        return false;
    }

}

public boolean isFilePresent(Context context, String fileName) {
    String path = context.getFilesDir().getAbsolutePath() + "/" + fileName;
    File file = new File(path);
    return file.exists();
}

onCreate of the Activity, you can use do the following

onCreate of Activity,您可以使用以下操作

boolean isFilePresent = isFilePresent(getActivity(), "storage.json");
if(isFilePresent) {
   String jsonString = read(getActivity(), "storage.json");
   //do the json parsing here and do the rest of functionality of app
} else {
   boolean isFileCreated = create(getActivity, "storage.json", "{}");
   if(isFileCreated) {
     //proceed with storing the first todo  or show ui
   } else {
     //show error or try again.
   }
}

reference https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

参考https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

#1


4  

Every android app has its own internal storage only that app can access, you can read from there or write to it.

每个Android应用程序都有自己的内部存储空间,只有该应用程序可以访问,您可以从那里读取或写入它。

In you case, you first want to check if you such file exist before creating one.

在您的情况下,您首先要在创建此文件之前检查是否存在此类文件。

  private String read(Context context, String fileName) {
    try {
        FileInputStream fis = context.openFileInput(fileName);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }
        return sb.toString();
    } catch (FileNotFoundException fileNotFound) {
        return null;
    } catch (IOException ioException) {
        return null;
    }
}

private boolean create(Context context, String fileName, String jsonString){
    String FILENAME = "storage.json";
    try {
        FileOutputStream fos = openFileOutput(fileName,Context.MODE_PRIVATE);
        if (jsonString != null) {
            fos.write(jsonString.getBytes());
        }
        fos.close();
        return true;
    } catch (FileNotFoundException fileNotFound) {
        return false;
    } catch (IOException ioException) {
        return false;
    }

}

public boolean isFilePresent(Context context, String fileName) {
    String path = context.getFilesDir().getAbsolutePath() + "/" + fileName;
    File file = new File(path);
    return file.exists();
}

onCreate of the Activity, you can use do the following

onCreate of Activity,您可以使用以下操作

boolean isFilePresent = isFilePresent(getActivity(), "storage.json");
if(isFilePresent) {
   String jsonString = read(getActivity(), "storage.json");
   //do the json parsing here and do the rest of functionality of app
} else {
   boolean isFileCreated = create(getActivity, "storage.json", "{}");
   if(isFileCreated) {
     //proceed with storing the first todo  or show ui
   } else {
     //show error or try again.
   }
}

reference https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

参考https://developer.android.com/guide/topics/data/data-storage.html#filesInternal