2013-06-24 2 views
3

커스텀 ContentProvider로 게임 내 최고 점수를 제공하려고합니다. SQLite DB 대신 서버 연결을 사용합니다. 이제 네트워크를 데이터 소스로 사용하는 Android ContentProvider

, 컨텐트 프로의 쿼리(), 갱신() 방법은 선택, selectionArgs있는 sortOrder PARAMS이() 삭제합니다. 그래서 질문은 : 어떻게 그들을 파싱합니까? 나는이 간단한 응용 프로그램에 무거운 SQL 문법 파싱 라이브러리를 추가하고 싶지 않습니다.

인터넷상의 사람들은 RESTProvider : https://github.com/novoda/RESTProvider을 언급합니다. 그것은 내가 찾고있는 것 같았지만 관련 코드가 누락 된 것으로 밝혀졌습니다.

왜 처음에는 높은 점수를 얻기 위해 ContentProvider를 사용하고 싶습니까? 왜냐하면 커서가 안드로이드에서 큰 지원을하고 있기 때문에 내 다른 관련 애플 리케이션에 유용 할 수 있습니다.

답변

2

응답/댓글을받지 못 했으므로 직접 질문에 답변하십시오.

기본적으로 이러한 상황에서는 가능한 한 문제를 단순화하는 것이 좋습니다. 따라서 I은 단지 column = ? AND 혼성 단편을 구성하는 선택을 컬럼 이름을 가질돌출부를 한정 column ASC 또는 column DESC 부분으로 구성 할 에게있는 sortOrder 필요했다.

즉, 일부 네트워크 데이터의 경우 SQL 엔진이 아니라 단순히 ContentProvider 인터페이스를 만들려고합니다.

0

앱과 ContentProvider 간의 통합은 Uri를 통한 것입니다. 따라서 이미 언급했듯이 SQL이 전혀 필요하지 않습니다. if/switch 문을 사용하여 query(..) 메서드를 구현하고 네트워크 요청을 수행하면됩니다. 대부분 응용 프로그램에서 LoaderManager.LoaderCallbacks<D>을 사용하고 있으며 네트워크 요청이 주 스레드 외부에서 실행됩니다.

이제는 <D> 유형에 대한 질문입니다. 콘텐츠 제공자 query 반환 유형을 준수하려면 Cursor이어야합니다.
응용 프로그램에 일관성을 유지하기 위해 인터페이스 Cursor을 구현해야합니다. 새 Cursor 기반 클래스는 SQLite 커서를 사용할 때와 마찬가지로 JSON을 구문 분석하고 데이터를 반환 할 수 있습니다. _cursor.get<Type>(_cursor.getColumnIndex(_name))

다른 접근 방식은 LoaderManager.LoaderCallbacks<YourClass>을 구현하는 것입니다. YourClass에는 실제 콘텐츠에서 데이터를 가져 오는 것을 단순화하는 다른 방법이 있습니다. 물론, 콘텐츠 공급자가 Cursor을 반환하기 때문에 로더를 만들 때 중간에 뭔가를 조정해야합니다.

관련 문제