참고 : http://cafe.naver.com/androidone.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=52
 

Data Storage

Storage quickview

  • Fast, lightweight storage through system preferences
  • File storage to device internal or removable flash
  • Arbitrary and structured storage in databases
  • Support for network-based storage

In this document

  1. Preferences
  2. Files
  3. Databases
  4. Network

See also

  1. Content Providers and Content Resolvers

A typical desktop operating system provides a common file system that any application can use to store files that can be read by other applications (perhaps with some access control settings). Android uses a different system: On Android, all application data (including files) are private to that application.

전형적인 데스크탑 운영 체제는 파일을 다른 애플리케이션이 읽을 수 있도록 저장하기 위해, 모든 애플리케이션이 사용할 수 있는 보편적 파일 시스템을 제공한다(아마 약간의 접근 제한 설정을 가진다). 안드로이드는 다른 형태의 시스템을 사용한다. 안드로이드 상에서, 모든 애플리케이션의 데이터(파일을 포함함)는 그 애플리케이션에게 프라이빗private하다.

However, Android also provides a standard way for an application to expose its private data to other applications through content providers. A content provider is an optional component of an application that exposes read/write access to the application's data, subject to whatever restrictions it might impose. Content providers implement a standard syntax for requesting and modifying data, and a standard mechanism for reading the returned data. Android supplies a number of content providers for standard data types, such as image, audio, and video files and personal contact information. For more information on using content providers, see a separate document, Content Providers.

하지만 안드로이드는 또한 - 컨텐트 프로바이더를 통해서 - 그것의 프라이빗private 데이터를 다른 애플리케이션에게 보여주기 위해, 애플리케이션에 대한 표준 방법을 제공한다. 컨텐트 프로바이더는 애플리케이션 데이터에 읽기/쓰기 접근을 제공하는 애플리케이션의 선택사항(역주: 있어도 없어도 되는)에 속하는 컴포넌트이다. 그 읽기/쓰기 접근은 그 컨텐트 프로바이더가 부과할 수도 있는 제약의 조건에 따른다. 그 컨텐트 프로바이더는 데이터를 요청하고 수정하는 것에 대한 표준 문법과, 그리고 리턴된 데이터를 읽는 것에 대한 표준 메커니즘을 구현한다. 안드로이드는 이미지, 오디오 그리고 비디오 파일과 개인 컨택 정보와 같은 표준 데이터 타입에 대한 다수의 컨텐트 프로바이더를 지원한다. 컨텐트 프로바이더를 사용하는 것에 대한 더 많은 정보에 대해서는 7장. “컨텐트 프로바이더”를 보라.

Whether or not you want to export your application's data to others, you need a way to store it. Android provides the following four mechanisms for storing and retrieving data: Preferences, Files, Databases, and Network.

여러분이 다른 애플리케이션에게 자신의 애플리케이션 데이터를 내보내길 원하던 또는 원하지 않던 간에, 여러분은 그것을 저장하는 방법이 필요하다. 안드로이드는 데이터를 저장하고 가져오기 위해 다음의 네 가지 메커니즘을 제공한다: 프레퍼런스Preferences, 파일, 데이터베이스, 그리고 네트워크이 그것이다.

Preferences

Preferences is a lightweight mechanism to store and retrieve key-value pairs of primitive data types. It is typically used to store application preferences, such as a default greeting or a text font to be loaded whenever the application is started. Call Context.getSharedPreferences() to read and write values. Assign a name to your set of preferences if you want to share them with other components in the same application, or use Activity.getPreferences() with no name to keep them private to the calling activity. You cannot share preferences across applications (except by using a content provider).

프레퍼런스Preference는 기본적인 데이터 타입에 대한 키와 값의 쌍key-value pair을 저장하고 가져오는 가벼운 메커니즘이다. 이것은 전형적으로 애플리케이션이 시작될 때마다 로드되어야 하는 기본적인 환영 인사말이나 텍스트 폰트와 같은, 애플리케이션의 환경설정 정보를 저장하기 위해 사용된다. 이곳에 값을 읽고 쓰기 위해서는 Context.getSharedPreferences()를 호출하라. 만약 여러분이 같은 애플리케이션 내의 다른 컴포넌트들에게 이것을 공유하고자 한다면, 여러분의 프레퍼런스 집합에 이름을 할당하라. 또한 호출하는 액티비티의 프라이빗private 영역에 그것을 유지하기 위해서는, 이름없이 Activity.getPreferences()를 사용하라. 여러분은 (컨텐트 프로바이더를 사용하는 것에 의하지 않고서는) 프레퍼런스를 애플리케이션의 경계를 넘어서 공유할 수 없다.

Here is an example of setting user preferences for silent keypress mode for a calculator:

여기에 계산기에 대한 소리없는 키입력 모드를 위한 사용자 프레퍼런스를 설정하는 예제가 있다.

<PRE>import android.app.Activity;import android.content.SharedPreferences;public class Calc extends Activity {public static final String PREFS_NAME = "MyPrefsFile"; . . . @Override protected void onCreate(Bundle state){ super.onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // Save user preferences. We need an Editor object to // make changes. All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Don't forget to commit your edits!!! editor.commit(); }}</PRE>

Files

You can store files directly on the mobile device or on a removable storage medium. By default, other applications cannot access these files.

여러분은 모바일 디바이스 상에 또는 분리될 수 있는 저장 매체 상에 직접적으로 파일들을 저장할 수 있다. 디폴트로 다른 애플리케이션들은 이러한 파일들에 접근할 수 없다.

To read data from a file, call Context.openFileInput() and pass it the local name and path of the file. It returns a standard Java FileInputStream object. To write to a file, call Context.openFileOutput() with the name and path. It returns a FileOutputStream object. Calling these methods with name and path strings from another application will not work; you can only access local files.

파일로부터의 데이터를 읽기 위해서는 Context.openFileInput()을 호출하고, 그것에 파일의 로컬 이름과 경로path를 전달하라. 그것은 표준 Java FileInputStream 오브젝트를 리턴한다. 파일에 쓰기 위해서는, 이름과 경로를 가지고 Context.openFileOutput()을 호출하라. 그것은 FileOutputStream 오브젝트를 리턴한다. 다른 애플리케이션에서 이름과 경로 문자열를 가지고 이 메쏘드를 호출하는 것은 동작하지 않을 것이다; 여러분은 단지 로컬 파일들에만 접근할 수 있다.

If you have a static file to package with your application at compile time, you can save the file in your project in res/raw/myDataFile, and then open it with Resources.openRawResource (R.raw.myDataFile). It returns an InputStream object that you can use to read from the file.

만약 여러분이 컴파일 시점에 여러분의 애플리케이션과 함께 패키지할 정적static 파일을 가지고 있다면, 여러분 프로젝트의 res/raw/myDataFile로 그 파일을 저장할 수 있으며, 그리고 나서 Resources.openRawResource(R.raw.myDataFile)를 사용해서 그것을 오픈할 수 있다. 그것은 여러분이 파일로로부터 읽기 위해 사용할 수 있는 InputStream 오브젝트를 리턴한다.

Databases

The Android API contains support for creating and using SQLite databases. Each database is private to the application that creates it.

안드로이드 API는 SQLite 데이터베이스를 생성하고 사용하는 것에 대한 지원을 포함한다. 각각의 데이터베이스는 그것을 생성한 애플리케이션에게 프라이빗private하다.

The SQLiteDatabase object represents a database and has methods for interacting with it making queries and managing the data. To create the database, call SQLiteDatabase.create() and also subclass SQLiteOpenHelper.

SQLiteDatabase 오브젝트는 데이터베이스를 나타내고, 그것과 상호작용하는 - 쿼리query를 하고 데이터를 관리하는 - 메쏘드들을 가지고 있다. 데이터베이스를 생성하기 위해서는 SQLiteDatabase.create()를 호출하고, 또한 서브클래스 SQLiteOpenHelper를 호출하라.

As part of its support for the SQLite database system, Android exposes database management functions that let you store complex collections of data wrapped into useful objects. For example, Android defines a data type for contact information; it consists of many fields including a first and last name (strings), an address and phone numbers (also strings), a photo (bitmap image), and much other information describing a person.

SQLite 데이터베이스 시스템을 위한 지원support의 일부로써, 안드로이드는 데이터베이스 관리 기능을 제공한다. 그것은 여러분이 유용한 오브젝트들로 감싸진wrapped 복잡한 데이터 집합들collection을 저장하게 한다. 예를 들어 안드로이드는 컨택contact 정보에 대한 데이터 타입을 정의한다. 그것은 성과 이름(문자열), 주소와 전화번호(또한 문자열), 사진(비트맵 이미지), 그리고 사람을 설명하는 다른 많은 정보를 포함하는 많은 필드들로 구성되어 있다.

Android ships with the sqlite3 database tool, which enables you to browse table contents, run SQL commands, and perform other useful functions on SQLite databases. See Examine databases (sqlite3) to learn how to run this program.

안드로이드는 여러분이 테이블 컨텐츠를 브라우즈하고, SQL 명령어를 실행하고, 그리고 SQL 데이터베이스의 다른 유용한 기능을 수행하는 것을 가능하게 하는 sqlite3 데이터베이스 도구를 함께 배포하고 있다.이 프로그램을 실행하는 방법을 배우기 위해서는 "sqlite3 데이터베이스 사용하기"를 보라.

All databases, SQLite and others, are stored on the device in /data/data/package_name/databases.

모든 데이터베이스(SQLite와 그 밖의 것들)는 디바이스 상의 /data/data/package_name/databases 안에 저장된다.

Discussion of how many tables to create, what fields they contain, and how they are linked, is beyond the scope of this note, but Android does not impose any limitations beyond the standard SQLite concepts. We do recommend including an autoincrement value key field that can be used as a unique ID to quickly find a record. This is not required for private data, but if you implement a content provider, you must include such a unique ID field. See the Content Providers document for more information on this field and the NotePadProvider class in the NotePad sample code for an example of creating and populating a new database. Any databases you create will be accessible by name to any other class in the application, but not outside the application.

얼마나 많은 테이블들이 생성되는지, 그것들이 포함하는 필드들이 무엇인지, 그리고 그것들은 어떻게 연결되는 지에 대한 논의는 이 노트의 범위를 벗어난 것이다. 그러나 안드로이드는 표준 SQLite 컨셉concept을 넘어서는 어떤 제한도 강제하지 않는다. 우리는 빠르게 레코드를 찾기 위해, 레코드에 대한 고유한 ID로 사용될 수 있는 자동증가 값 키 필드autoincrement value key field를 포함할 것을 권장한다. 이것은 프라이빗private 데이터를 위해서는 요구되지 않지만, 만약 여러분이 컨텐트 프로바이더를 구현한다면, 여러분은 그러한 고유한 ID 필드를 포함해야 한다. 이 필드에 대한 더 많은 정보에 대해서는 컨텐트 프로바이더 문서를 보고, 새로운 데이터베이스를 생성하고 거주시키는populate(역주: 테이블들을 그 안에 놓는) 예제에 대해서는 NotePad 샘플 코드의 NotePadProvider를 보라. 여러분이 생성한 어떤 데이터베이스는 애플리케이션 내의 다른 어떤 클래스에서든 이름에 의해 접근할 수 있다. 그러나 애플리케이션 밖에서는 아니다.

Network

You can also use the network to store and retrieve data (when it's available). To do network operations, use the classes in the following packages:

여러분은 또한 (네트워크가 사용 가능하다면) 데이터를 저장하고 가져오기 위해 네트워크를 사용할 수 있다. 네트워크 오퍼레이션을 하기 위해서는, 다음의 패키지에 있는 클래스를 사용하라:

  • java.net.*
  • android.net.* 
신고

'Android > 번역' 카테고리의 다른 글

Layout Tricks 번역 [펌글]  (0) 2010.04.14
Data Storage, Database 번역 [펌글]  (0) 2010.04.14
Content Providers 번역 [펌글]  (0) 2010.04.14
Using the Contacts API  (0) 2010.03.17
Posted by 까칠코더.


티스토리 툴바