본문 바로가기

Android

[20일차] Loader , ContentProvider

ContextProvider


 안드로이드에서 Appilcation들이 접근할 수있는 방법을 제공해주는거 



Uri를 넘겨줘야 한다. 


context://contacts/people/1


ContextResolver


ContentProvider 통신 


OpenAssetFileDescriptor, openFileDescriptor, openInputStream,



주소록 데이터를 가져오는 방법


주소록은 Contact이라고 하고 ContactsContract - 주소록데이터와 관련된 정보이다. 


주소록 데이터는 실제로 복잡하다. 


간단하게 말하면 Contact이라는 테이블이 있고, raw contact 이라는 게 있다. Data가 있다. 


raw contact 안에 Data에 대한 Table이 잇다. 


READ_CONTACTS,WRITE_CONTACTS를 runtimePermission을 획득해야한다. 



주소록 데이터 가져오는거 실습 . 


주소록을 가져오기 위해서는 Content Resilver가 필요하다. 


ContextResolver resolver = getContextResolver() 를 통해 얻을 수있따. 단 액티비티를 상속한 상태에서 이렇게 얻을 수 있다. 



SimpleCursor Adapter는 항상 ID가 있어야 한다. 



자음검색을 다 구현해줘야하기때문에 FilterUri를 써야한다.


간단하게 해보 자 .



Loader 



Loader

- 안드로이드 3.0 에서 소개된 Loader 를 사용하면 액티비티와 프래그먼트에서의 비동기 데이터 로딩을 쉽게 처리할 수 있습니다.


특징

- 모든 액티비티와 프래그먼트에서 사용할 수 있습니다.

- 어플리케이션 UI를 Blocking 하지 않도록 비동기 데이터 로딩을 제공합니다.

- 데이터를 모니터 하기 때문에 데이터가 변경되었을때 변경사항을 확인할 수 있습니다.



API

LoaderManager 

- LoaderManager는 액티비티, 프래그먼트 와 1:1 의 관계를 갖습니다. 액티비티 하나당 하나의 LoaderManger 가 존재하는 셈이죠

그리고 하나의 LoaderManager 는 여러개의 Loader 를 관리하게 됩니다.


검색을 하거나 cancel처리 같은 경우 처리를 Loader가 해준다. 자동으로 해준다. Loader AsncLoader ContentProvider로 부터 데이터를 읽어오는 방법을 Cursor라고 한다. Cursor로더를 이용해서 데이터를 획득한다. 

그래야 아까 얘기 했더 데이터 cancel처리 같은거를 Loader를 만들어서 가져오고 하고 있다. 

막상 구글도 이걸 써서 만들진 않는다. 

ContentProvider만들때 로더를 많이 쓴다. 

Cusor로더에 대한 것 만 실습하고 넘어가도록 한다. 

getSUpportLoaderManager().initLoader(0,null,this);

로더 매니져가 어떻게 하냐면 onCreateLoader를 호출해준다. 

여기서는 뭘해주냐면 로더를 만들어서 요청해 줘야한다. 

그래서 onCreateLoader()에서 로더를 만들어줘야 한다. 

Uri uri = ContactsContract.Contacts.CONTEXT_URI;
return new CusorLoader(this, uri, projection, selection,null,sort);

onLoadFinished()메소드에서 mAdapter.swapSursor(data) 기존에 커서를 내것으로 교환만 해준다. 

onLoaderReset()은 로더가 쓸모없을때, 이 메소드를 호출해줘서 끝내준다. 그래서 mAdapter.swapCusor(null) 을 한다. 


InputView.addTextChangedListener(new TextWatcher(){

//이렇게 얻어온다. 

})



'Android' 카테고리의 다른 글

[21일차] 카메라 서피스뷰  (0) 2016.08.16
[21일차] AudioData  (0) 2016.08.16
[18일차] SharedPreferences  (0) 2016.08.10
[18일차]퍼미션  (0) 2016.08.10
[18일차] 파일  (0) 2016.08.10