2014-09-16
A: content (필수로 있어야 함)
B: DB select * from trains where _id=122
C: 옵션
D: ID(_id)
android
onCreate() - 최초 1회만 실행됨
MATCHER.addURI("org.kandroid.sample.Provider", "namecard", NAMECARDS);
검색할 때
MATCHER.addURI("org.kandroid.sample.Provider", "namecard/#", NAMECARD_ID);
/# 모든 ID값선택
MyProvider Manifest
<provider android:name=".MyProvider"
android:multiprocess="false"
android:grantUriPermissions="true"
android:readPermission="kandroid.permission.READ_PROVIDER"
android:writePermission="kandroid.permission.WRITE_PROVIDER"
android:authorities="org.kandroid.sample.Provider" >-> URI이름지정
</provider>
MyResolver2.java
Cursor my_cursor = getContentResolver().query(CONTENT_URI,
PROJECTION, null, null, null);
Resolver를 통해서 쿼리 진행
MyProvider.java
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sort) {
SQLiteQueryBuilder qb=new SQLiteQueryBuilder();
qb.setTables(getTableName());
if (isCollectionUri(url)) {
qb.setProjectionMap(getDefaultProjection());
}
else {
qb.appendWhere(getIdColumnName()+"="+url.getPathSegments().get(1));
}
String orderBy;
if (TextUtils.isEmpty(sort)) {
orderBy=getDefaultSortOrder();
} else {
orderBy=sort;
}
// ↑유효성 검사
Cursor c=qb.query(db, projection, selection, selectionArgs,
null, null, orderBy);
c.setNotificationUri(getContext().getContentResolver(), url); <-빼도 동작은 하나 오류가 날 확률이 높음
return c;
}
MyResolver2.java
Cursor my_cursor = getContentResolver().query(CONTENT_URI,
PROJECTION, null, null, null);
ListAdapter adapter=
new SimpleCursorAdapter(this,
R.layout.row, my_cursor,
new String[] {"title","value"},
new int[] {R.id.title, R.id.value}); 윗줄과 개수 동일하게
setListAdapter(adapter);
registerForContextMenu(getListView());
}
MyProVider
내부 클래스 DatabaseHelper 생성
query()
delete()
onCreate()
Manifest.xml <- provider 태그만 추가
MyResolver
onCreate();
OnCreateContextMenu()
onContextItemSelected()
delete()
processDelete()