Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

read and write data with GSON

Tags:

java

android

gson

I am struggling to find a good example on how to read and write data in my android app using GSON. Could someone please show me or point me to a good example? I am using this for data persistence between activities.

My professor gave this example to for writing:

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

How would I go about saving that to a file?

like image 760
Deekor Avatar asked Oct 18 '13 21:10

Deekor


3 Answers

How to save your JSON into a file on internal storage:

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

How to read it back:

 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);
like image 94
giampaolo Avatar answered Nov 14 '22 00:11

giampaolo


Maybe in more recent version, but toJson accepts writer that directly writes to file.

ex.:

Vector v = new Vector(10.0f, 20.0f);
Gson gson = new GsonBuilder().create(); 
Writer writerJ = new FileWriter("keep.json");
gson.toJson(v,writerJ);
like image 27
zhrist Avatar answered Nov 14 '22 00:11

zhrist


Simple Gson example:

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

}

Anyways checkout the documentation.

And to persist something in your application you can start with something simple like ORMlite.

Hope this help! :]

UPDATE:

If you really want write the json in a file:

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

And if you want to read:

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

Also add: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> to your manifest.

But, seriously is so much better use a ORM and store the records in the db. I don't know why you need save the json data in a file, but if I was you, I will use the ORM way.

like image 26
4gus71n Avatar answered Nov 14 '22 00:11

4gus71n