Tôi đang thiết lập ứng dụng của mình để mọi người có thể tạo nhóm bạn bè của họ. Khi một nhóm được tạo ra, nó ghi 2 bảng vào cơ sở dữ liệu SQL. Bảng đầu tiên có tên nhóm và id nhóm. Bảng thứ hai có 2 cột, một id nhóm và một id người dùng. Điều này làm việc tốt.Cách đọc DB SQLite trong android bằng trình tải con trỏ?
Tuy nhiên, bây giờ tôi muốn có thể đọc từ cơ sở dữ liệu. Tôi đang sử dụng phân đoạn listview với số cursorloader
nhưng tôi đang gặp sự cố khi nhận thông tin để hiển thị. Tôi muốn liệt kê tất cả các tên nhóm từ bảng đầu tiên trong chế độ xem danh sách của tôi.
Vấn đề của tôi là khi lần đầu tiên tôi sử dụng cursorloader
để liệt kê các liên hệ của mình, tôi đã sử dụng Uri
từ content provider
theo phương pháp onCreateLoader
. Cụ thể tôi có CONTENT_URI
từ lớp ContactsContracts.Contacts
.
Ví dụ về cursorloader
với contentprovider
:
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
Uri contentUri = ContactsContract.Contacts.CONTENT_URI;
return new CursorLoader(getActivity(),contentUri,PROJECTION,SELECTION,ARGS,ORDER);
}
Tuy nhiên, không sử dụng một nhà cung cấp nội dung, tôi không biết những gì để đưa vào phương pháp onCreateLoader
vì return new CursorLoader(...)
đòi hỏi một Uri
trong đối số thứ hai.
Bất kỳ đề xuất nào về cách tôi có thể hiển thị dữ liệu cơ sở dữ liệu của mình trong chế độ xem danh sách?
đoạn mã lớp:
public class GroupListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
CursorAdapter mAdapter;
private OnItemSelectedListener listener;
private static final String[] PROJECTION ={GroupContract.GroupDetails.COLUMN_NAME_GROUP_NAME};
private static final String SELECTION = null;
final String[] FROM = {GroupContract.GroupDetails.COLUMN_NAME_GROUP_NAME};
final int[] TO = {android.R.id.text1};
private static final String[] ARGS = null;
private static final String ORDER = null;
private Cursor c;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mAdapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_1,null,FROM,TO,0);
ReadDBAsync readDB = new ReadDBAsync();
readDB.execute();
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0,null,this);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
Uri contenturi = Uri.parse("content://preamble.oneapp");
Uri tableuri = Uri.withAppendedPath(contenturi,GroupContract.GroupDetails.TABLE_NAME);
return new CursorLoader(getActivity(),tableuri,PROJECTION,SELECTION,ARGS,ORDER);
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
mAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
mAdapter.swapCursor(null);
}
private class ReadDBAsync extends AsyncTask<Void,Void,String> {
@Override
protected String doInBackground(Void... voids) {
ContractDBHelpers mDBHelper = new ContractDBHelpers(getActivity());
SQLiteDatabase db = mDBHelper.getReadableDatabase();
String returnvalue = "database read";
c = db.query(GroupContract.GroupDetails.TABLE_NAME,PROJECTION,null,null,null,null,null);
return returnvalue;
}
@Override
protected void onPostExecute(String result){
Toast.makeText(getActivity(), result, Toast.LENGTH_LONG).show();
}
}
}
Bạn đã tạo nhà cung cấp nội dung để quản lý cơ sở dữ liệu của mình? – user936414
@ user936414 không, có cần thiết không? những lợi ích/bất lợi khi làm như vậy là gì? Chỉnh sửa: chỉ cần đọc lên trên nó, tôi không cần phải chia sẻ dữ liệu trên nhiều ứng dụng vì vậy tôi không cần một nhà cung cấp nội dung –