Android用のチャットアプリを書いています。コンテンツプロバイダーを使用するデータベースは私の専門知識ではないため、解決できない問題に直面しました。だから私はあなたの一人が私を助けることができるかもしれないと思いました。現在、テーブル(メッセージ)があります。私の目標は、特定のユーザーのリストビューのデータを更新することです。つまり、3人のユーザーとチャットしているので、指定したuser1データのみでリストビューを更新する必要があります。私のデータベースはAndroid ContentProvider
(sqlite)で、次のようになります。
| Message |
| _Id |
| _from |
| _to |
| _body |
| _type |
| date |
このようにテーブルにデータを挿入しています。
ChatMessage chat_message = new ChatMessage(user_id, from, to, body, "CHAT", date);
context.getContentResolver().insert(ChatMessage.MESSAGE_URI,
chat_message.getContentValues());
私はこのコードを使用して、このようにリストビューのデータを更新しています。SQliteで利用可能な完全なデータを更新していますが、このようなフィールド `_from = user1'がクエリを作成する必要がある場合は、更新したいと思います。
public class MessageFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor>, OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
full_to = getArguments().getString("USER_ID");
to = getArguments().getString("U_NAME");
acc_id = getArguments().getString("ACC_ID");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.compose_message_activity, container, false);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getListView().setDivider(null);
mAdapter = new MessageAdapter(getActivity(), null);
getLoaderManager().initLoader(TUTORIAL_LIST_LOADER, null, this);
setListAdapter(mAdapter);
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
private void loadMessageContent() {
getLoaderManager().restartLoader(0, getArguments(), this);
if (!TextUtils.isEmpty(to)) {
ContentValues args = new ContentValues();
getActivity().getContentResolver().query(ChatMessage.MESSAGE_URI, null, ChatMessage.FIELD_FROM + "=?", new String[] { to } , null);
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = { ChatMessage.FIELD_ID, ChatMessage.FIELD_BODY };
CursorLoader cursorLoader = new CursorLoader(getActivity(), ChatMessage.MESSAGE_URI, projection, null, null, ChatMessage.FIELD_DATE + " ASC");
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}