일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 사용법
- #리사이클러뷰 어댑터
- 안드로이드 익명클래스
- 리사이클러뷰 체크박스
- MVVM
- retrofit2
- #리사이클러뷰
- 레트로핏
- #안드로이드
- 메모리릭
- 구글맵안돼요
- 안드로이드
- #SMS API #안드로이드 SMS #SMS Retriever
- 안드로이드 아키텍쳐
- retrofit
- 빗버킷 #bitbucket #authorization failed #깃
- #ContentProvider #App DataShare
- zeplin
- #android #안드로이드 #glide #gif #이미지다운로드
- retrofi
- 안드로이드해상도
- 제플린
- 클린아키텍쳐
- 키스토어
- 안드로이드 메모리릭
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
다른 앱과 Data Share하는 방법 Feat. ContentProvider 본문
개요
- A 앱와 B앱 간의 데이터 Share를 위한 ContentProvider 소스 샘플
- 중요한 건 다른 앱 간의 Interface를 맞추는 작업 이라는 것
- 앱과 앱이 Direct Access가 허용되지 않는다는 것
본론
- 필요한 개념: ContentProvider , Uri Scheme. Sqlite ,Room
- 참고로 Room을 사용해 Db 객체를 얻어왔다. → SupportSqlLiteDatabase - Room 객체는 SingleTone 처리 할 것. ( DB 객체 IO작업은 생각보다 무겁다고 함 ) → 자세히 알아볼 것
A의 작업 (데이터를 보관하는 앱)
public class MyContentProvider extends ContentProvider { private SupportSQLiteDatabase db; @Override public boolean onCreate() { AppDatabase database =MyApplication.getAppDatabase(); if(database==null){ MyApplication.initDataBase(getContext()); } db = MyApplication.getAppDatabase().getOpenHelper().getReadableDatabase(); return (db == null) ? false : true; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { Cursor cursor = db.query("SELECT * FROM someList"); // Room의 장점 -> 기존의 SqlIte처럼 파라미터 뜻을 알아야하거나 그럴 필요가 없음. 바로 String형 Query를 때릴 수 있음. cursor.setNotificationUri(getContext().getContentResolver(),uri); return cursor; } @Nullable @Override public String getType(@NonNull Uri uri) { return null; } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { return null; } @Override public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { return 0; } } |
|
B의 작업(데이터를 요청하는 앱)
ContentObserver contentObserver = new ContentObserver(new Handler()) { @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); MakeLog.log("change",uri.getLastPathSegment()); } }; |
@Override protected void onDestroy() { super.onDestroy(); /* Unregist 하지 않으면 메모리 누수의 위험*/ resolver.unregisterContentObserver(contentObserver); } |
Cursor c = resolver.query(Uri.parse(URL), null, null, null, null); List<String> list = new ArrayList<>(); while (c.moveToNext()) { MakeLog.log("유저아이디",""+c.getString(c.getColumnIndex("userId"))); list.add(c.getString(c.getColumnIndex("userId"))); } |
'개발 Tip' 카테고리의 다른 글
[레트로핏]Retrofit2 @Field 와 @Body 차이 Feat.DTO (0) | 2019.05.17 |
---|---|
BaseActivity로 액티비티, 프래그먼트 전환 메서드 재사용 하기 (0) | 2019.05.17 |
여러개의 EditText의 String 값을 깔끔하게 Null & Empty 검사하는 방법 (0) | 2019.05.16 |
안드로이드 RecyclerView Item Delete (0) | 2019.04.21 |
RecyclerView 와 Retrofit2를 사용해 영화 목록 얻어오기 (0) | 2019.04.11 |
Comments