2013-10-18 18 views
9

Tôi đang cố gắng tìm một ví dụ tốt về cách đọc và ghi dữ liệu trong ứng dụng Android của tôi bằng GSON. Ai đó có thể vui lòng chỉ cho tôi hoặc chỉ cho tôi một ví dụ hay không? Tôi đang sử dụng điều này để duy trì dữ liệu giữa các hoạt động.đọc và ghi dữ liệu với GSON

giáo sư của tôi đã ví dụ này để cho các văn bản:

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

Làm thế nào tôi sẽ đi về tiết kiệm đó vào một tập tin?

+0

Điều này dường như không phải là vấn đề với Gson, có vẻ như bạn đang tìm kiếm thông tin về cách tạo tệp trên thiết bị Android ... –

+0

@RayStojonic Tôi chưa bao giờ nói đó là vấn đề. Tôi không thể tìm thấy bất kỳ thông tin tốt về cách sử dụng nó. – Deekor

+0

Có thể điều này có thể giúp bạn: http://developer.android.com/training/basics/data-storage/files.html – giampaolo

Trả lời

18

Làm thế nào để tiết kiệm JSON của bạn vào một tập tin vào bộ nhớ trong:

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

Làm thế nào để đọc nó trở lại:

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); 
+0

openFileInput chỉ chấp nhận một thông số duy nhất cần phải là một chuỗi. – Cappuccino90

+0

và ngữ cảnh là gì? – Line

9

Simple Gson dụ:

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 kiểm tra các documentation.

Và để duy trì một cái gì đó trong ứng dụng của bạn, bạn có thể bắt đầu với một cái gì đó đơn giản như ORMlite.

Hy vọng trợ giúp này! :]

UPDATE:

Nếu bạn thực sự muốn viết json trong một tập tin:

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

Và nếu bạn muốn đọc:

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

Ngoài ra thêm: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> vào tệp kê khai của bạn.

Nhưng, nghiêm túc là tốt hơn rất nhiều khi sử dụng ORM và lưu trữ các bản ghi trong db. Tôi không biết tại sao bạn cần lưu dữ liệu json trong một tập tin, nhưng nếu tôi là bạn, tôi sẽ sử dụng cách ORM.

+0

Cảm ơn ví dụ. Làm thế nào tôi sẽ viết những json để nộp? – Deekor

+0

Tôi đã cập nhật câu trả lời. – 4gus71n

0

Lưu lớp học của bạn trong SharedPrefrences sử dụng

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

nơi 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(); 
    } 
} 
0

Có thể trong phiên bản mới hơn, nhưng toJson chấp nhận người viết ghi trực tiếp vào tệp.

cũ .:

Vector v = new Vector(10.0f, 20.0f); 
Gson gson = new GsonBuilder().create(); 
Writer writerJ = new FileWriter("keep.json"); 
gson.toJson(v,writerJ); 
0

Bạn cũng có thể làm được điều này hoàn toàn với những con suối và tránh một đối tượng trung gian:

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

Chọn kích thước bộ đệm một cách thích hợp. 64k là flash-thân thiện, nhưng ngớ ngẩn nếu bạn chỉ có 1k dữ liệu. các tài nguyên dùng thử cũng có thể không được hỗ trợ bởi một số phiên bản Android.

Các vấn đề liên quan