2012-04-01 3 views
3

기본적으로 모든 데이터 저장 메커니즘을 구현하는 것을 제외하고는 개발중인 응용 프로그램을 끝내고 있습니다. 얼마 전에 옵션을 살펴본 결과, SQLiteDatabase가 가장 적합하다고 판단되었지만, 구현 방법을 고민하는 것이 어려웠 기 때문에 나머지 프로그램을 끝낼 때까지 남겨 두었습니다. 그 이후로 저는 장치에서 실행할 때마다 모든 값을 다시 입력하여 테스트했습니다./TabActivity에서 SQLiteDatabase 및 AsyncTask 구현 방법/

기본적으로 화면에 아무것도 표시되지 않습니다. 사용자는 플레이어를 추가합니다 (메뉴 및 대화 상자를 통해). 플레이어 목록이 완성되면 대화 상자에서 "저장"을 클릭합니다. 그런 다음 각 플레이어의 테이블 행은 동적으로 팽창되어 Button, 몇 개의 ImageViews 및 TextView를 포함하며 모든 플레이어의 다양한 속성을 표시합니다. 그게 내 질문에는별로 중요하지 않습니다.

그래서 내 응용 프로그램은 기본적으로 플레이어 개체를 추적합니다. 데이터베이스 개체를 모두 가이드로 사용하여 작성했습니다 : http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/, 대부분의 "플레이어"에 대해 "연락처"를 바꿉니다.

내가 이해하기 어려운 부분은 주요 플레이어의 onCreate, onResume 및 onStop 메소드에서 수행 할 작업뿐만 아니라 각 플레이어 객체의 "저장"및 "로드"를 정확히 구현하는 부분입니다. 지금까지 수 시간 동안이 작업을 조사해 봤지만 AsyncTask도 구현해야한다는 것을 배웠습니다.하지만이 작업은 훨씬 더 복잡해졌으며 비동기로 수행하는 것은 물론 내 기본 데이터 로딩 작업도 수행 할 수 없습니다. .

AsyncTask와 SQLiteDatabase를 "Android 용 프로그래머 : App-Driven Approach"라는 책에서 구현하는 좋은 예가 Deitel Developer Series에 있지만, 예제에서는 CursorAdapter를 ListActivity, 그래서 나는 그것이 내 상황에 적용되도록하는 방법을 모른다. (내 것은 TabActivity입니다. 위에서 설명한 것은 "플레이어보기"탭에 대한 것입니다.)

사용자가 "플레이어 추가 대화 상자"에서 "저장"을 클릭하면 데이터베이스에 플레이어를 추가하는 것이 좋습니다. "하지만 플레이어 개체를 다시로드하는 위치와 각 플레이어의 테이블 행을 다시 위치시킬 위치를 이해하지 못합니다.

죄송하지만 더 정확한 코드를 게시하지는 않지만 일반적인 질문이 많으며 천 줄 정도이므로 내 전체 앱을 게시하지 않는 것이 좋습니다. 어떤 도움이라도 대단히 감사 할 것입니다, 나는 여기에 모든 작은 것을 게시하지 않으려 고하지만이 물건은 너무 오랫동안 나를 좌절 시켰습니다!

답변

0

AsyncTasks는 구성 변경 (예 : 휴대 전화의 회전)과 관련하여 고통이며, 메모리 누출을 쉽게 만듭니다. 오히려 로더를 사용해야합니다. 이름을 신경 쓸 필요는 없으며 기본적으로 백그라운드에서 수행되는 모든 작업에 대해 데이터를 쓸 수 있습니다. 더 구체적으로는 AsyncTaskLoader을 사용하고 loadInBackground() 메서드에서는 데이터베이스 도우미를 SELECT 또는 INSERT하는 방법을 사용합니다. 데이터베이스 도우미는 SQLiteOpenHelper의 확장이어야하며 인스턴스를 한 번만 인스턴스화해야 응용 프로그램 컨텍스트에 넣고 거기에서 참조를 가져올 것을 제안합니다.

희망이 있습니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 매니 페스트에서 세로로 설정된 이후 전화가 회전하는 것에 대해 걱정하지 않습니다. 나는 코드의 각 부분을 어디에 두어야하는지 더 걱정한다. 물건을 "저장"할 수있는 곳을 알고 있지만, 사용자가 앱을 다시 시작할 때마다, 특히 onCreate(), onResume(), onStop() 등과 관련하여 모든 것을 다시로드하는 방법을 모르겠습니다. 저장된 정보, 상태 복원 등을 완전히 이해하지 못합니다. –

+0

또한 링크 된 AsyncTaskLoader 문서를 체크 아웃했습니다. 안드로이드 3.0에서 소개 되었기 때문에 내 앱 (및 전화)이 API 8 이상을 사용하기 때문에 사용할 수 없습니다. –

+1

할 수 있습니다! 그들은 Compatibility Package에있어, 잘 기억한다면 API 7+ 용으로 사용할 수 있습니다. –

1

나는 당신과 같은 책을 가지고있다. 나는 AddressBook 애플 리케이션 (DatabaseConnector를 다룬다)을 따라 갔고, 나에게 꽤 도움이되었다. 자, 코드를 공유 할 수 있습니다. (SQL/PHP 스크립트를 통해 login/register를위한 또 다른 안드로이드 하이브 튜토리얼을 따라했습니다.) 그런 다음 성공적으로 ASyncTask를 사용하기 위해 그것을 이동 시켰습니다. 즉, 지금 당장 작업중인 부분은 로컬 SQLite db를 다시 구현하는 것입니다.이 정보를 화면에 표시 할 수 있도록 로그인 된 사용자의 전자 메일 등을 저장해야합니다.또한 사용자가 더 많은 정보 (연령, 국적 등)를 제출할 수있는 페이지가 있으며 앱은 나머지 계정 정보와 함께 해당 데이터를 SQL 서버에 저장합니다.

그래서 제가 말했던 것처럼 이 코드를 여러분과 공유하게되어 기쁩니다. 그러나 여러분이 찾고있는 것과 정확히 일치하지는 않습니다. 로컬 SQLite db가 아닌 네트워크 데이터베이스입니다. 그것은 SQLite db aspect를 가질 것이고, 나는 그 부분을 끝내지 않았다.

마지막으로, 귀하의 Deitel 책에서 AddressBook을 제안합니다. 정말 도움이되었습니다.

+0

답장을 보내 주셔서 감사합니다. 네 말이 맞아, 나는 네트워크 데이터베이스에 관심이 없다.하지만 로컬 데이터베이스는 일단 내가하고있는 것과 똑같은 소리를 낸다. 내 앱의 각 Player 객체는 앱에서 나이, 국적 등을 추적하는 것과 같은 방식으로 정보를 추적합니다. 앱에 대해 Deitel 책을 사용하려고했으나 설명하는 방식은 "ListView를 사용하고 자동으로 ListActivity이기 때문에 모든 작업을 수행 할 수 있습니다. " 그래서, 그것은 내 애플 리케이션에 도움이되지 않습니다. 이 책은 여러면에서 좋지만 다른 책에서는 좋지 않습니다. –

+0

동의합니다. 나중에 로컬 SQLite dB로 작업하는 방법에 대한 자세한 정보를 게시하려고합니다.이 게시물을 편집하거나 다른 답장을 삭제 하시겠습니까? – Davek804

+0

문자 한도로 인해 다른 답장을 삭제하는 것이 더 쉽습니다. 어떤 것이 든 나는 필사적이다. –

관련 문제