0

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);
   }
}
4

1 に答える 1

0

数日苦労した後、ようやく私は自分の要件に対する解決策を手に入れました。これを使用することにより、データベースから必要なデータを取得できます。

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    Log.i(THIS_FILE, "Content Changes ");        
    CursorLoader cursorLoader = new CursorLoader(getActivity(), ChatMessage.MESSAGE_URI, null,  ChatMessage.FIELD_FROM + "=?", new String[] { to } , ChatMessage.FIELD_DATE + " ASC" );
    return cursorLoader;
}
于 2013-01-07T09:34:31.363 に答える