Android 데이터 영구 화 환경 설정 메커니즘 상세 설명

이 사례 는 안 드 로 이 드 데이터 의 지속 적 인 Preferences 체 제 를 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
Android 에서 데이터 의 지속 화 를 실현 하 는 데 는 다섯 가지 방식 이 있 습 니 다.Preferences,파일 File,I/O 작업,SQLite 데이터베이스,ContentProvider 구성 요소 입 니 다.
다음은 간단 한 소 개 를 하 겠 습 니 다.
1.Preferences 의 소개:
Preferences 는 경량급 데이터 저장 체제 입 니 다.그 는 boolean 형식,int 형식,float 형식,long 형식 과 String 형식의 데 이 터 를 포함 하여 키 쌍 의 형식 으로 응용 프로그램의 개인 Preferences 디 렉 터 리(/data/<패키지 이름>/shared 에 저장 합 니 다.prefs/)에서 이러한 Preferences 메커니즘 은 응용 프로그램의 설정 정 보 를 저장 하 는 데 광범 위 하 게 응용 된다.
다음은 Preferences 의 간단 한 코드 입 니 다.
이 코드 는 서로 다른 권한 을 만 드 는 데이터 대상 입 니 다:

package com.example.data_sharedpreferences;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
  private TextView text;
  private Button button;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //     
    writeData();
    text = (TextView) findViewById(R.id.text);
    button = (Button) findViewById(R.id.button0);
    button.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        //     
        readData();
      }
    });
  }
  /**
   *     
   */
  public void writeData() {
    //        MODE_PRIVATE
    SharedPreferences sp_p = this.getSharedPreferences("ct_sp_private",
        Context.MODE_PRIVATE);
    //   SharedPreferences        Editor       
    SharedPreferences.Editor editor = sp_p.edit();
    //             
    editor.putString("username", "marry_private");
    //     ,      xml   
    editor.commit();
    //      
    SharedPreferences sp_or = this.getSharedPreferences("ct_sp_private",
        Context.MODE_WORLD_READABLE);
    sp_or.edit().putString("username", "marry_only_read").commit();
    //      
    SharedPreferences sp_ow = this.getSharedPreferences("ct_sp_private",
        Context.MODE_WORLD_WRITEABLE);
    sp_ow.edit().putString("username", "marry_only_write").commit();
    //        
    SharedPreferences sp_x = this.getSharedPreferences("ct_sp_private",
        Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
    sp_x.edit().putString("username", "marry_write_read").commit();
  }
  /**
   *     
   *   SharedPreferences    key       key   value。               :getBoolean
   * ,getInt,getFloat,getLong.
   */
  public void readData() {
    // TODO Auto-generated method stub
    text.setText("private_username:"
        + this.getSharedPreferences("ct_cp_private", 0).getString(
            "username", "marry_private")
        + "\r
" + "read_username:" + this.getSharedPreferences("ct_cp_private", 0).getString( "username", "marry_only_read") + "\r
" + "write_username:" + this.getSharedPreferences("ct_cp_private", 0).getString( "username", "marry_only_write") + "\r
" + "write_read_username:" + this.getSharedPreferences("ct_cp_private", 0).getString( "username", "marry_write_read") + "\r
"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
다음 코드 는 다른 응용 프로그램 에서 이전 응용 프로그램 에 접근 하고 위 에 응 용 된 데 이 터 를 읽 는 것 을 실현 합 니 다.

package com.example.data_sharedpreferences2;
import com.example.data_sharedpreferences2.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
 *          data_sharedpreferences   Sharedpreferences          :
 * 1、                2、             
 *
 * @author marry
 *
 */
public class MainActivity extends Activity {
  private TextView text;
  private Button button;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text = (TextView) findViewById(R.id.text);
    button = (Button) findViewById(R.id.button0);
    button.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        //     1,     1   
        try {
          //         context
          Context ortherContext = createPackageContext(
              "com.example.data_sharedpreferences", 0);
          //   ortherContext.getSharedPreferences    1   
          text.setText("private_username:"
              + ortherContext.getSharedPreferences(
                  "ct_cp_private", 0).getString("username",
                  "marry_private")
              + "\r
" + "read_username:" + ortherContext.getSharedPreferences( "ct_cp_private", 0).getString("username", "marry_only_read") + "\r
" + "write_username:" + ortherContext.getSharedPreferences( "ct_cp_private", 0).getString("username", "marry_only_write") + "\r
" + "write_read_username:" + ortherContext.getSharedPreferences( "ct_cp_private", 0).getString("username", "marry_write_read") + "\r
"); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
Preferences 를 사용 할 때 다음 과 같은 주의 할 점 이 있 습 니 다.
1.Context.getSharedPreferences(String fileName,int mode)방법 을 통 해 xml 파일 을 열 수 있 습 니 다.파일 의 위 치 는/data/package 입 니 다.name/shared_prefs/fileName.xml,존재 하지 않 으 면 자동 으로 생 성 됩 니 다.이 파일 에 대해 읽 기와 쓰기 작업 을 할 수 있 으 며,응용 프로그램의 각 구성 요소 간 에 데 이 터 를 공유 할 수 있 습 니 다.mode 를 Context.MODE 로 설정 하면WORLD_READ 혹은 Context.MODEWORLD_WRITE 는 다른 응용 프로그램 에 도 접근 할 수 있 습 니 다.그러나 이것 은 안 드 로 이 드 가 추천 하 는 방식 이 아니 라 크로스 애플 리 케 이 션 공유 데 이 터 를 실현 하려 면 ContentProvider 로 추천 하 는 방식 입 니 다.
2.다른 응용 프로그램 에서 만 든 shared 에 접근 하려 면prefs 파일,2 가지 조건 을 만족 시 켜 야 합 니 다.우선 다른 응용 프로그램 은 MODE 를 설정 해 야 합 니 다.WORLD_READ 또는 MODEWORLD_WIRTE 권한,그리고 다른 응용 프로그램의 package 를 알 아야 합 니 다.name,그리고Context.createPackageContext()방법 을 통 해 다른 응용 context 를 얻 을 수 있 습 니 다.그리고context.getSharedPreferences()방법 으로 shared 를 열 수 있 습 니 다.prefs 파일 입 니 다.하지만 이런 방법 은 추천 하지 않 습 니 다.
3.보기 드 문 상황 에서 sharedprefs 권한 은 MODE 로 설정PRIVATE,다른 응용 프로그램 에 접근 할 수 있 기 를 바 랍 니 다.그러면 manifest 파일 에 android:user 를 설정 할 수 있 습 니 다.id(이 속성 인 것 같 음),여러 애플 리 케 이 션 공유 USERID。본질 적 으로 sharedprefs 파일 은 Liux 의 권한 으로 제어 합 니 다.MODEPRIVATE 는-rw----와 유사 하기 때문에 여러 응용 프로그램 이 같은 USER 를 사용 했다 면ID,자 연 스 럽 게 이 파일 에 접근 할 수 있 는 권한 이 생 겼 습 니 다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,그리고 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기