2010-08-20 11 views
3

이 항목에 대한 2010 Google I/O 비디오를보고 있는데 제대로 이해할 수 있도록 몇 가지 질문이 있습니다. 데이터베이스 및 웹 서비스 모델

Google I/O 2010 - Android REST client applications

내가 또한 지금 내 응용 프로그램 단지 UI 층을 가지고

CursorAdapters

매우 제한된 이해를 가지고 있습니다. 약간의 Google 자습서를 사용하여 DbAdapter라는 개체를 만들어이 데이터베이스에 작은 데이터베이스와 테이블을 만들었습니다.

클래스를 만들었습니다. DataBroker (ContentProvider를 확장)를 호출하여 데이터베이스에서 데이터를 검색하고 데이터를 업데이트하기 위해 웹 서비스를 호출하도록 관리합니다.

시나리오 :

1) 내 ListActivity에서 항목의 목록을 표시 할 가정하자. 그 항목을 보유하고있는 데이터베이스의 테이블에 커서를 생성하는 DataBroker 함수를 작성한다고 가정하고, 웹 서비스를 호출하는 스레드를 시작하는 서비스를 시작하여 추가 항목을 가져온 다음 Cursor를 반환합니다. 내 UI 스레드에? 이렇게하면 웹 서비스가 끝나기 전에 Cursor가 UI 스레드로 반환 될 것입니다. CursorAdapter에 Cursor가 있으면 해당 데이터베이스 테이블에 대한 변경 사항이 자동으로 표시됩니다.

2) 이제 ListView에 항목 목록이 있습니다. 사용자에게 항목을 삭제할 수있는 기능을 제공한다고 가정합니다. 사용자가이 기능을 실행합니다. 그것은 내 DataBroker에있는 함수를 호출하여 해당 항목에 해당하는 데이터베이스의 행을 업데이트하고 상태 열을 STATE_DELETING (이 상태를 제외한 절이 있기 때문에 ListView에서 행을 제거함)로 설정 한 다음 a 내 웹 서비스에 도착하는 스레드를 시작한 다음 완료되면 데이터베이스의 행을 삭제하는 서비스?

또한 여러 개의 활동이 있다고 가정 할 때 목록이있는 각 활동에 대한 정적 커서가 있고 활동의 onCreate에서 해당 커서를 움켜 잡고 커서가 null 인 경우 DataBroker를 때리면 어떻게됩니까?

+0

데이터베이스 히트가 서비스에 있어야한다고 가정합니다. 서비스 (히트 웹 서비스)를 시작하는 서비스 (데이터베이스 방문)를 가질 수 있습니까? – Andrew

+0

저는 ContentProvider 모델에 더 기대고 있다고 생각합니다. 누군가이 코드를 알고 있다면 코드에 대한 튜토리얼을 사용할 수 있습니다. – Andrew

답변

1

아무도 응답하지 않았기 때문에, 나는

내가 DataBroker 이름을 바꾼 것을 주목해야 할 (그리고 동작하는 것) 한 것을 응답 수 있습니다. 내 ContentProvider는 이제 다른 이름으로 호출되며 DataBroker라는 확장 서비스가 있습니다.

1) 서비스 내에서 Cursor 쿼리를 수행하지 않습니다. Activity에서 Cursor를 호출 한 다음 Service (DataBroker)를 호출하여 웹 서비스에 새 데이터를 쿼리합니다. 새로운 데이터가 발견되면 DataBroker는 모든 Activity 수신에 의해 수신 된 메시지를 브로드 캐스팅하고 Activity는 Cursor를 다시 쿼리합니다.

2) 내 서비스 (DataBroker)에 삭제해야하는 행의 ID를 인 텐트를 통해 전달합니다. 서비스는 해당 ID에 대한 상태 열을 STATE_DELETING으로 표시하고, 웹 서비스를 사용하여 서버에 행이 삭제되었음을 알리고, 서버에 의해 확인 된 경우 내 데이터베이스에서 행을 삭제합니다. 또한 행에 STATE_DELETING이라고 표시된 후, 내가 수행 한 활동을 알리는 관심있는 활동에서 구독 할 수있는 메시지를 브로드 캐스트합니다. 그렇게하면 Activity가 Cursor (STATE_DELETING 행을 반환하지 않음)를 다시 질의 할 수 있습니다.

관련 문제