Java 用GSON读写数据

Java 用GSON读写数据,java,android,gson,Java,Android,Gson,我正在努力寻找一个关于如何使用GSON在我的android应用程序中读写数据的好例子。有人能给我看看或给我举个好例子吗?我使用它来实现活动之间的数据持久性 我的教授给我举了一个写作的例子: Vector v = new Vector(10.0f, 20.0f); Gson gson = new Gson(); String s = gson.toJson(v); 如何将其保存到文件中?简单Gson示例: public class Main { public class Power {

我正在努力寻找一个关于如何使用GSON在我的android应用程序中读写数据的好例子。有人能给我看看或给我举个好例子吗?我使用它来实现活动之间的数据持久性

我的教授给我举了一个写作的例子:

Vector v = new Vector(10.0f, 20.0f);
Gson gson = new Gson();
String s = gson.toJson(v);
如何将其保存到文件中?

简单Gson示例:

public class Main {

    public class Power {
        private String name;
        private Long damage;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Long getDamage() {
            return damage;
        }

        public void setDamage(Long damage) {
            this.damage = damage;
        }

        public Power() {
            super();
        }

        public Power(String name, Long damage) {
            super();
            this.name = name;
            this.damage = damage;
        }

        @Override
        public String toString() {
            return "Power [name=" + name + ", damage=" + damage + "]";
        }

    }

    public class Warrior {
        private String name;
        private Power power;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Power getPower() {
            return power;
        }

        public void setPower(Power power) {
            this.power = power;
        }

        public Warrior() {
            super();
        }

        public Warrior(String name, Power power) {
            super();
            this.name = name;
            this.power = power;
        }

        @Override
        public String toString() {
            return "Warrior [name=" + name + ", power=" + power.toString() + "]";
        }

    }

    public static void main(String[] args) {
        Main m = new Main();
        m.run();
    }

    private void run() {
        Warrior jake = new Warrior("Jake the dog", new Power("Rubber hand", 123l));
        String jsonJake = new Gson().toJson(jake);
        System.out.println("Json:"+jsonJake);
        Warrior returnToWarrior = new Gson().fromJson(jsonJake, Warrior.class);
        System.out.println("Object:"+returnToWarrior.toString());
    }

}
无论如何,结帐吧

要在应用程序中持久化某些内容,您可以从以下简单内容开始

希望这有帮助!:]

更新:

如果您真的想在文件中写入json:

        File myFile = new File("/sdcard/myjsonstuff.txt");
        myFile.createNewFile();
        FileOutputStream fOut = new FileOutputStream(myFile);
        OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut);
        myOutWriter.append(myJsonString);
        myOutWriter.close();
        fOut.close();
如果你想阅读:

        File myFile = new File("/sdcard/myjsonstuff.txt");
        FileInputStream fIn = new FileInputStream(myFile);
        BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
        String aDataRow = "";
        String aBuffer = ""; //Holds the text
        while ((aDataRow = myReader.readLine()) != null) 
        {
            aBuffer += aDataRow ;
        }
        myReader.close();
同时添加:
到你的舱单


但是,说真的,最好使用ORM并将记录存储在数据库中。我不知道您为什么需要将json数据保存到文件中,但如果我是您,我将使用ORM方式。

如何将json保存到内部存储的文件中:

String filename = "myfile.txt";

Vector v = new Vector(10.0f, 20.0f);
Gson gson = new Gson();
String s = gson.toJson(v);

FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(s.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}
如何读回:

 FileInputStream fis = context.openFileInput("myfile.txt", Context.MODE_PRIVATE);
 InputStreamReader isr = new InputStreamReader(fis);
 BufferedReader bufferedReader = new BufferedReader(isr);
 StringBuilder sb = new StringBuilder();
 String line;
 while ((line = bufferedReader.readLine()) != null) {
     sb.append(line);
 }

 String json = sb.toString();
 Gson gson = new Gson();
 Vector v = gson.fromJson(json, Vector.class);

使用将类保存在SharedReferences中

public static void saveYourClassInSharedPref(ClassToSave ClassToSave) {
        try{
            String json = "";
            if(ClassToSave != null){
                json = new Gson().toJson(ClassToSave);
            }
            SharedPref.save(KeysSharedPrefs.ClassToSave, json);
        }catch (Exception ex){
            ex.printStackTrace();
        }

    }

    public static ClassToSave readYourClassFromSharedPref() {
        ClassToSave ClassToSave;
        try{
            String json = SharedPref.read(KeysSharedPrefs.ClassToSave, "");
            if(!json.isEmpty()){
                ClassToSave = new Gson().fromJson(json, ClassToSave.class);
                return ClassToSave;
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }
其中SharedPref.java

public class SharedPref {

    public static String read(String valueKey, String valueDefault) {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(App.context);
        return prefs.getString(valueKey, valueDefault);
    }

    public static void save(String valueKey, String value) {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(App.context);
        SharedPreferences.Editor edit = prefs.edit();
        edit.putString(valueKey, value);
        edit.commit();
    }
}

也许在更新的版本中,但toJson接受直接写入文件的writer

例:


您还可以完全使用流执行此操作,并避免使用中间对象:

Vector v;

// This should be reused, so private static final
Gson gson = new GsonBuilder().create();

// Read from file:
try (InputStream fileIn = context.openFileInput("myfile.txt", Context.MODE_PRIVATE);
     BufferedInputStream bufferedIn = new BufferedInputStream(fileIn, 65536);
     Reader reader = new InputStreamReader(bufferedIn, StandardCharsets.UTF_8)) {
    gson.fromJson(reader, Vector.class);
}

v = new Vector(10.0f, 20.0f);

// Write to file
try (OutputStream fileOut = context.openFileOutput(filename, Context.MODE_PRIVATE);
     OutputStream bufferedOut = new BufferedOutputStream(fileOut, 65536);
     Writer writer = new OutputStreamWriter(bufferedOut)) {
    gson.toJson(v, writer);
}

适当选择缓冲区大小。64k对闪存非常友好,但如果只有1k的数据,那就太傻了。某些版本的Android可能也不支持“资源试用”。

这似乎不是Gson的问题,似乎您正在寻找有关在Android设备上创建文件的信息…@RayStojonic我从来没有说过这是个问题。我找不到任何关于如何使用它的好信息。也许这可以帮助你:@trapo在该文档中没有提到
GSON
。是的,但是一旦你有了“s”字符串,只需将其保存,因为你会将“Hello world”字符串保存到示例中。谢谢你的示例。如何将这些json写入文件?openFileInput只接受一个参数,该参数必须是字符串。上下文是什么?
Vector v;

// This should be reused, so private static final
Gson gson = new GsonBuilder().create();

// Read from file:
try (InputStream fileIn = context.openFileInput("myfile.txt", Context.MODE_PRIVATE);
     BufferedInputStream bufferedIn = new BufferedInputStream(fileIn, 65536);
     Reader reader = new InputStreamReader(bufferedIn, StandardCharsets.UTF_8)) {
    gson.fromJson(reader, Vector.class);
}

v = new Vector(10.0f, 20.0f);

// Write to file
try (OutputStream fileOut = context.openFileOutput(filename, Context.MODE_PRIVATE);
     OutputStream bufferedOut = new BufferedOutputStream(fileOut, 65536);
     Writer writer = new OutputStreamWriter(bufferedOut)) {
    gson.toJson(v, writer);
}