ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ContentProvier를 사용하기 위한 기본지식 2. ContentUris.withAppendedId()
    IT&개발/안드로이드2 2015. 8. 23. 18:12
    728x90
    반응형

    이것은 기본지식이라고 할수도 있으며 아니라고 할수도 있다.


    가끔 ContentProvier에서 insert() 메소드 속에서 볼 수 있는 구문이다.


    많은 컨텐트 프로바이더가 존재하며 컨텐트 프로바이더는 DB를 사용하기 위하여 선언을 한다.


    그렇기에 DB를 변경하고 나면 그 변경된 사항에 대해서 나머지 컨텐트 프로베이더를 위하여 알려주어야 한다.


    일단, 인터넷에서 보았을 때 이것에 대해서는 선택사항이라고 봤다.


    다른 컨텐트프로바이더들에게 알리는 구문은 

    getContext().getContentResolver().notifyChange(insertUri, null) 이다.

    여기서 insertUri를 주목하라. 

    이전에 컨텐트 프로바이더를 사용하기 위한 기본지식 1.에서도잠깐 언급하였는데

     URI는 다음과 같이 구성되어있다.



    맨끝에 4번의 경우 해당 DB의 행이다. 예를들면, 다음과 같이 

    화살표가 가리키는 행은 4번째 행에 해당한다.


    SQLiteDatabase의 insert 메소드는 return 값으로 새로운 행에 대한 정수를 return을 한다.

    이때 새로운 행이 데이터베이스에 추가가 되었고 나머지 컨텐트 프로바이더들은 ㅇ이것을 알아야 한다. 

    그리고 그 알리는 소스가 아까 언급하였던 

    getContext().getContentResolver().notifyChange(insertUri, null) 이다.

    notifyChange()함수에서 첫번째 인자 uri 는 무엇을 말할까?

    변경된 부분의 Uri 즉 경로를 말한다.


    예를 들어, Uri가

    content://com.provider.students/students/4

    와 같다면

    students 테이블의 4번째 id 레코드가 삭제되었다는 것을 의미 하는 것이다.

     

    content://com.provider.students/students

    와 같다면

    students 테이블의 여러개의 레코드가 삭제되었다는 것을 의미 하는 것이다.


    그렇다면 insert 구문이 생성될 때마다 1,2,3 부분의 값과 4번을 합쳐서 URI 객체를 만들고 해야할까?

    이것에 대한 해답이 바로 ContentUris.withAppendedId()이다. 

    ContentUris.withAppendedId()은 2개의 인자가 들어간다. 

    URI 와 id값이다.

    •  

      (Uri contentUri, long id)

      Parameters
      contentUri- 시작되는 URI 객체
      id

      - 추가될 id 값(insert시 return 되는 값)

      Returns
      • contentUri 와 id가 합처진 Uri 객체 값 - contentUri/id 형태

    이렇게 ContentUris.withAppendedId(uri,di)값을 새로운 URL 객체에 저장하여서

    getContext().getContentResolver().notifyChange(insertUri, null)로 사용하면 된다.

    사용예)

    Uri insertUri = ContentUris.withAppendedId(uri, id);
    getContext().getContentResolver().notifyChange(insertUri, null);



    반응형

    댓글

Designed by Tistory.