2013-10-18 7 views
9

GSONを使用してAndroidアプリケーションでデータを読み書きする方法の良い例を見つけるのには苦労しています。誰かが私を見せてくれるか、私に良い例を教えてもらえますか?私はこれをアクティビティ間のデータ永続化に使用しています。GSONでデータを読み書きする

私の教授が執筆のために、この例を与えた:

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

は、どのように私は、ファイルにそれを保存して行くのでしょうか?

+0

これはGsonの問題ではないようですが、Androidデバイスにファイルを作成する方法の情報を探しているようです。 –

+0

@RayStojonic私はそれが問題ではないとは言いませんでした。私はそれを使用する方法についての任意の良い情報を見つけることができません。 – Deekor

+0

これはおそらくあなたを助けることができます:http://developer.android.com/training/basics/data-storage/files.html – giampaolo

答えて

18

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

openFileInputは、文字列でなければならない単一のパラメータだけを受け入れます。 – Cappuccino90

+0

とは何ですか? – Line

9

シンプル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()); 
    } 

} 

はとにかくdocumentationをチェックアウト。

アプリケーションに何かを残すには、ORMliteのような単純なものから始めましょう。

このヘルプが必要です。 :]

UPDATE:

をあなたが本当にファイルに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(); 

をさらに追加します。<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />をマニフェストに

しかし、真剣にORMを使用して、レコードをdbに格納する方がはるかに優れています。なぜjsonデータをファイルに保存する必要があるのか​​分かりませんが、私があなただったらORMの方法を使います。内部ストレージ上のファイルにあなたのJSONを保存する方法

+0

ありがとうございます。どのように私はそれらのjsonをファイルに書きますか? – Deekor

+0

私は答えを更新しました。 – 4gus71n

0

を使用してSharedPrefrencesであなたのクラスを保存し

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

もっと最近のバージョンかもしれませんが、toJsonはファイルに直接書き込むライターを受け入れます。

例:

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

また、ストリームに完全にこれを行うと、中間オブジェクトを避けることができます。

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の一部のバージョンではサポートされていない可能性があります。

関連する問題