2016-09-08 1 views
0

JSONデータを電話に保存して、電話がオフラインの場合にデータを表示する方法はありますか?JSONデータをグリッドビューで解析して、今すぐオフラインで利用できるようにしたい

そして、データをキャッシュする最良のオプションは何でしょうか?あなたのデータを構造化し、部品にアクセスしたいされている場合は、あなたがより良いSQLiteを使用する必要があります

if (InternetConnection.checkConnection(getApplicationContext())) 
     new GetDataTask().execute(); 



     class GetDataTask extends AsyncTask<Void, Void, Void> { 

      private static final String KEY_ICONURL ="http://droid.hol.es/images/"; ; 
      ProgressDialog dialog; 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 

       dialog = new ProgressDialog(Exit_View_Activity.this); 

       dialog.show(); 
      } 

      @Nullable 
      @Override 
      protected Void doInBackground(Void... params) { 

       jsonObject = JSONParser.getDataFromWeb(); 

       try { 

        if (jsonObject != null) { 

         if(jsonObject.length() > 0) { 

          JSONArray array = jsonObject.getJSONArray(Keys.KEY_INFO); 

          int lenArray = array.length(); 
          if(lenArray > 0) { 
           for(int jIndex = 0; jIndex < lenArray; jIndex++) {          
            MyDataModel model = new MyDataModel(); 


            JSONObject innerObject = array.getJSONObject(jIndex); 
            String name = innerObject.getString(Keys.KEY_NAME); 
            String viewtype = innerObject.getString(Keys.KEY_VIEWTYPE); 
            String image = innerObject.getString(Keys.KEY_ICON); 

            String Constantfilter = cat_id.replaceAll("[^0-9,]",""); 
            Log.i("CONSTANT :",Constantfilter); 

            String[] numbers = Constantfilter.split(","); 
            for (int i=0;i<numbers.length;i++) { 
             Log.i("Number: ", numbers[i]); 

             if(numbers[i].equals(Keys.CONSTANT_CAT)) { 
              if (innerObject.getString(Keys.KEY_VIEWTYPE).equals("exit") || innerObject.getString(Keys.KEY_VIEWTYPE).equals("grid,exit")) { 
               model.setName(name); 
               model.setView_type(viewtype); 
               model.setId(id); 
               model.setImage(KEY_ICONURL + image); 
               model.setCat_id(cat_id); 
               model.setGrid_order_id(grid_order_id); 
               list.add(model); 
              } 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void aVoid) { 
       super.onPostExecute(aVoid); 
       dialog.dismiss(); 

      if (list.size() > 0) { 
       try { 
        adapter.notifyDataSetChanged(); 
        dataPath = objectToFile(list); 

        editor.putString("key_name5",dataPath); // Saving string 

        // Save the changes in SharedPreferences 
        editor.commit(); // commit changes 

        // pref.getString("key_name5", null); 
        // list = (ArrayList<MyDataModel>)objectFromFile(dataPath); 
        Snackbar.make(findViewById(R.id.parentLayout), pref.getString("key_name5", null), Snackbar.LENGTH_LONG).show(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
+0

共有プリフォーマーにjsonを保存してもう一度使用します – Abhishek

+0

データが小さい場合は 'SharedPreferences'、データが大きい場合は' SQLite'。 – SripadRaj

+0

? plzは私が使用したすべての例SharedPreferencesに与えるがproparly動作していない –

答えて

0

こんにちは私は「LocalSharedPrefrences」

public class LocalSharedPrefrences { 
    private static final String strSharedPrefName = "AppPrefrence"; 
    private static final String homePageJosn = "homePageJosn"; 
public static void saveHomePageJosnData(Context context, String JsonData) { 
     SharedPreferences pref = context.getSharedPreferences(strSharedPrefName, context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = pref.edit(); 
     editor.putString(homePageJosn, JsonData); 
     editor.commit(); 
    } 

    public static String getHomePageJosnData(Context context) { 
     SharedPreferences pref = context.getSharedPreferences(strSharedPrefName, context.MODE_PRIVATE); 
     String JsonData = pref.getString(homePageJosn, ""); 
     return JsonData; 
    } 
} 

を作成しました。そして、あなたが以下のようにJSONデータを保存し、取得するために、これらの機能を使用でき、例えば、任意の名前を持つクラスを作成することができます。

LocalSharedPrefrences。 saveHomePageJosnData(コンテキスト、JsonDataToSave);

文字列getJsonData = LocalSharedPrefrences.getHomePageJosnData(コンテキスト)

+0

パラメータのJsonDataToSaveは合格になりますか? –

+0

saveHomePageJosnData関数の2番目の位置に、共有のprefrenceで保存するString jsonDataを渡す必要があります。 –

2

:SharedPreferencesまたはSQLiteデータベース

ここでは、私はJSONを解析するために使用しています私のコードです。

このデータをキャッシュするだけで、今後は完全に使用する場合はSharedPrefを使用してください。スキーマを作成しないため、SQLiteはリソースと時間の両方を浪費します。

+0

データがsharedPref ありであれば共有県 –

+0

チェックのために、このコードでrequied何が変化した場合(sharedPref.contains(KEY)) //読み込みデータからsharedPref else //ネットワークコールを行う –

0

はい、あなたはあなたのJSONデータを保存することができますし、あなたがアンドロイドでSharedPreferencesを使用してオフラインで使用することができます。

まず、Javaクラス、つまりJsonを使用するpojoクラスが必要です。そのjsonを上記のクラスオブジェクトに変換します。

は、JSONを保存するには - これで>

gson.fromJson(preferences.getString("your same Key String", null), your json class.class); 

あなたはすなわち、JSONクラスオブジェクトを変換しているPOJOクラスのオブジェクトを取得します - >

private SharedPreferences preferences; 
preferences = context.getSharedPreferences("Name", Context.MODE_PRIVATE); 
editor = preferences.edit(); 
editor.putString("your Key String", gson.toJson(here will be your json class object)); 
editor.commit(); 

は、JSONは、その取得するには。

関連する問題