0

次のような形式web serviceでデータを返すを使用しています。JSON

{"content":[{"id":"1","asset_id":"62","title":"sample page","alias":"","introtext":"","fulltext":"Some Contents"},{"id":"2","asset_id":"62","title":"sample page2","alias":"","introtext":"","fulltext":"Some Contents"},{"id":"3","asset_id":"62","title":"sample page3","alias":"","introtext":"","fulltext":"Some Contents"}]}

onCreate()MainActivity.javaは:

boolean myFlag = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
    textView = (TextView) findViewById(R.id.myView);

    setFlag = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

    dataSource = new ContentsDataSource(this);
    dataSource.open();
    parseAndIsertData();

}

parseAndInsertData()

EDIT

private void parseAndIsertData() {
    // Creating JSON Parser instance
    MyJSONParser jParser = new MyJSONParser();

    contentDataObject = new ContentDataObject();        
    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(BASE_URL); 

    try {
        // first time check if data is inserted
        editor = setFlag.edit();
        editor.putBoolean(MY_KEY, true);            

        // Getting Array of Contents
        jsonArray = json.getJSONArray(MOBILE_CONTENT);          
        // looping through All Contents

        if(!myFlag){            

            for(int i = 0; i < jsonArray.length(); i++){

                contentDataObject.setId(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_ID));
                contentDataObject.setTitle(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_TITLE));
                contentDataObject.setFulltext(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_FULLTEXT));
                contentDataObject.setState(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_STATE));
                contentDataObject.setNewValue(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_NEW));
                contentDataObject.setHeader(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_HEADER));
                contentDataObject.setColor(jsonArray.getJSONObject(i).getInt(MOBILE_CONTENT_COLOR));
                contentDataObject.setNext(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_NEXT));
                contentDataObject.setPrevious(jsonArray.getJSONObject(i).getString(MOBILE_CONTENT_PREVIOUS));

                contentDataObject = dataSource.create(contentDataObject);

                Log.i(MY_TAGT, "Data Inserted " + contentDataObject.getId() + " Times");

            }

            myFlag = setFlag.getBoolean(MY_KEY, false);

        }


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

今私logcatの初めての打ち上げは:

ここに画像の説明を入力

アプリを再起動すると、次のようになりlogcatます。

ここに画像の説明を入力

今、私はこのアプローチが正しいかどうかを尋ねたいですYES! そしたらまた更新できますように!!ありがとう!

4

2 に答える 2

0

このコードがデータを複数回挿入することは正しいです。1 行のみを許可するパターンを実装するかどうかは、ユーザー次第です。

最初にデータ ソースにクエリを実行し、データが存在する場合はデータを挿入しないか、データ ソースからデータを削除してから毎回挿入する必要があります。他のパターンもありますが、この 2 つが最も一般的です。どちらを選択するかは、データの内容と、データを維持または更新する方法によって異なります。

于 2013-03-04T18:04:40.007 に答える
0
  1. テーブルの列をprimary keyまたはに定義するunique
  2. パラメーター (最後のパラメーター) を ``SQLiteDatabase.CONFLICT_IGNORE` に設定して使用SQLiteDatabase.insertWithOnConflict(...)しますconflictAlgorithm

これを見る

于 2013-03-05T09:22:16.447 に答える