我已经在Gridview中解析了JSON数据,现在我想让它脱机使用

时间:2016-09-08 07:28:17

标签: android json

有没有办法在手机上保存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();
                }

3 个答案:

答案 0 :(得分:2)

如果您的数据是结构化的,并且您想要部分访问它,则最好使用SQLite

如果你只是想缓存这些数据,你将来会更好地使用它,因为你不会为它创建模式,因此SQLite将浪费资源和时间。< / p>

答案 1 :(得分: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);

String getJsonData = LocalSharedPrefrences.getHomePageJosnData(Context)

答案 2 :(得分:0)

是的,您可以保存您的json数据,并且可以通过在android中使用SharedPreferences在离线状态下使用它。

首先你需要java类,即使用Json的pojo类,将json转换为上面的类对象。

保存json - &gt;

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 - &gt;

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

在这里你将获得该pojo类的对象,即转换为json类对象。