使用共享首选项停止在sqlite数据库中重复插入json解析数据

时间:2016-05-11 13:32:00

标签: android json sqlite

使用共享首选项停止在sqlite数据库中重复插入json解析数据。 CatagoryActivity.java:-这里我解析了json数据并调用方法将它添加到sqlite数据库中。

public void get_data(String data) {

        try {
            JSONArray data_array = new JSONArray(data);

            for (int i = 0; i < data_array.length(); i++) {
                JSONObject obj = new JSONObject(data_array.get(i).toString());

                Message add = new Message();
                Log.d("JSONVALUE :", obj.toString());
                String category = obj.optString("category");
                String status = obj.optString("status");
                String imgLink = obj.optString("imagelink");
                String id = obj.optString("id");
                add.setCategory(category);
                add.setStatus(status);
                add.setImagelink(imgLink);
                add.setId(id);
                objlist.add(add);
                dataBaseHelper.addSMS(category, status, imgLink);

                if(i==data_array.length()-1){
                    lastId=id;
                    new SendLastID().execute();
                }

            }

            new ListAdapter(CatagoryActivity.this, objlist)
                    .notifyDataSetChanged();



        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

DatabaseHelper: - 在此文件代码中,在sqlite数据库中插入已解析的数据

public  void addSMS(String category,String status,String imageLink) {


               SQLiteDatabase db123 = this.getWritableDatabase();

                    ContentValues values = new ContentValues();
                    values.put(MessagesAdapter.CATEGORY, category);
                    values.put(MessagesAdapter.Status, status);
                    values.put(MessagesAdapter.Imagelink,imageLink);

                    db123.insert(MessagesAdapter.TBL_CATEGORY, null, values);
                    //SharedPreferences sharedPreferences = context.getSharedPreferences("SMS",Context.MODE_PRIVATE);
                    //SharedPreferences.Editor editor = sharedPreferences.edit();
                    //editor.putString("IS_ADDED_IN_DB","YES");
                    //editor.commit();
                    Log.e("TAG","JSON DATA INSERTED"+values);



                    //Toast.makeText(mContext, "Data Iserted", Toast.LENGTH_LONG).show();

                    db123.close();
            }

2 个答案:

答案 0 :(得分:0)

不使用SharedPreferences阻止数据库中的重复条目,而是使用SQLiteDatabase.insertWithOnConflict方法和SQLiteDatabase.CONFLICT_IGNORE常量。

示例:

db123.insertWithOnConflict(MessagesAdapter.TBL_CATEGORY, 
                           null, 
                           values, 
                           SQLiteDatabase.CONFLICT_IGNORE);

并将primary-key设置为MessagesAdapter.CATEGORY列,以避免根据类别在MessagesAdapter.TBL_CATEGORY表中重复输入。

答案 1 :(得分:0)

试试这个,

在数据库中添加数据之前检查,

SharedPreferences sharedPreferences = context.getSharedPreferences("SMS",Context.MODE_PRIVATE);
if (!(sharedPreferences.getString(Constant.userId, NO).equalsIgnoreCase("YES")){
       dataBaseHelper.addSMS(category, status, imgLink);
}