Есть ли способ сохранить данные JSON на телефоне, чтобы вы могли видеть данные, если ваш телефон отключен?

И как лучше всего кэшировать данные? SharedPreferences или база данных SQLite

Вот мой код, который я использую для синтаксического анализа JSON:

   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
9x Chaudhari 8 Сен 2016 в 10:28

3 ответа

Лучший ответ

Привет, вы можете создать класс с любым именем, например, я создал "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
Rahul Vats 8 Сен 2016 в 07:42

Если ваши данные структурированы и вы хотите получить к ним доступ по частям, вам лучше использовать SQLite.

Если вы просто хотите кэшировать эти данные и будете использовать их полностью в будущем, лучше используйте SharedPref, так как вы не будете создавать для него схему, следовательно, SQLite будет пустой тратой ресурсов и времени.

2
Nayan Srivastava 8 Сен 2016 в 07:31

Да, вы можете сохранить свои данные json и использовать их в автономном режиме с помощью SharedPreferences в android.

Сначала вам нужно создать класс java, то есть класс pojo, используя Json, преобразовать этот json в вышеуказанный объект класса.

Чтобы сохранить этот json ->

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

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

В этом случае вы получите объект этого класса pojo, то есть преобразованный объект класса json.

0
sandeep kolhal 8 Сен 2016 в 07:56