こんにちは、基本的に、リストビューを更新できるように、sqlite データベースの列項目に関するキーと値のペアを取得して保存する方法を探しています。
例:「グループ」という名前の列があり、「家族」という名前の項目エントリがある場合。そのアイテムに関して、そのアイテム「家族」だけの連絡先(名前と番号)のリストを保存または取得できるようにしたいと考えています。別の項目エントリについても同様です。
これを行う最良の方法は何ですか? json経由でハッシュマップのArrayListを使用して、テーブルの列に連絡先の詳細を保存しようとしました。しかし、このようにするのに問題があります。私はこれを試しました:
保存時:
//already have the name and number from using the android contacts api
final ArrayList<HashMap<String,String>> contacts = new ArrayList<HashMap<String,String>>();
HashMap<String, String> map = new HashMap<String,String>();
map.put(name, number);
contacts.add(map);
JSONObject json_contacts = new JSONObject();
try {
json_contacts.put("contacts_Arrays", new JSONArray(contacts));
arraylist_to_string = json_contacts.toString();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ContentValues values = new ContentValues();
values.put(ContactDB.GROUP, groupname);
values.put(ContactDB.GROUP_CONTACTS, arraylist_to_string);
Log.d(TAG, "Successfully updating contacts for group");
dbadapter.updateGroup(rowId, values);
cursoradapter.notifyDataSetChanged();
bindview メソッドで取得する場合:
String contactDetails = cursor.getString(cursor.getColumnIndex(ContactDB.GROUP_CONTACTS));
if(contactDetails != null){
try {
JSONObject json = new JSONObject(contactDetails);
JSONArray json_array = json.optJSONArray("contacts_Arrays");
for(int i=0; i < json_array.length(); i++){
LinkedHashMap<String,String> map = new LinkedHashMap<String, String>();
Iterator<String> myIterator = map.keySet().iterator();
while(myIterator.hasNext()){
key = (String)myIterator.next();
value = (String)map.get(key);
holder.contact_name.setText(key);
holder.contact_number.setText(value);
notifyDataSetChanged();
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
return;
}
}
まったく運がなく、そもそもそれを行う正しい方法かどうかわかりません。データベース テーブルを構成する最善の方法は何でしょうか。連絡先オブジェクトを作成して保存する必要がありますか、それともより良い方法がありますか? ありがとうございました