사람들이 친구 그룹을 만들 수 있도록 앱을 설정하고 있습니다. 그룹이 생성되면 SQL 데이터베이스에 2 개의 테이블을 씁니다. 첫 번째 테이블에는 그룹 이름과 그룹 ID가 있습니다. 두 번째 테이블에는 두 개의 열, 그룹 ID 및 사용자 ID가 있습니다. 이것은 잘 작동합니다.커서 로더를 사용하여 Android에서 SQLite DB를 읽는 방법은 무엇입니까?
그러나 이제 데이터베이스에서 읽을 수 있기를 원합니다. cursorloader
과 함께 listview 조각을 사용하고 있지만 정보를 표시하는 데 문제가 있습니다. 내 목록보기에서 첫 번째 테이블의 모든 그룹 이름을 나열하고 싶습니다.
내 문제는 내가 처음 onCreateLoader
방법에 content provider
에서, 나는 Uri
을 사용하고 내 연락처를 나열 cursorloader
를 사용하는 경우, 점이다. 특히 나는 ContactsContracts.Contacts
클래스에서 CONTENT_URI
을 가졌습니다. cursorloader
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);
}
그러나, 콘텐츠 제공 업체를 사용하지 않고, 내가 return new CursorLoader(...)
가 두 번째 인수에 Uri
을 필요로하기 때문에 onCreateLoader
방법에 넣어 해야할지 모르겠어.
내 데이터베이스 데이터를 어떻게 목록보기에 표시 할 수 있을지에 대한 제안 사항이 있으십니까?
조각 클래스 코드 :
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();
}
}
}
데이터베이스를 관리하기 위해 컨텐츠 공급자를 만들었습니까? – user936414
@ user936414 아니요, 필요한가요? 그렇게 할 때의 이점/단점은 무엇입니까? 편집 : 그냥 그것을 읽고, 나는 여러 응용 프로그램에 걸쳐 데이터를 공유 할 필요가 없으므로 콘텐츠 공급자가 필요하지 않습니다. –