android學習筆記(五)——android的存儲1 sharedpreferences介紹

任何軟件或者app都在一定程度上需要數據存儲,android提供了sharedpreferences用來存儲輕量數據,sharedpreference將數據存儲於xml中,位於/data/data/{包名}/shared_prefs下,仿真機可以通過ddms從中取出,下面就來介紹一下
一、sharedpreferences的基本用法——寫入
1.毫無疑問,首先需要定義sharedpreferences的對象
sharedpreferences share =getsharedpreferences(“包名”,Context.MODE_PRIVATE),第一個參數爲android程序所屬的包的名稱
第二個參數爲存儲模式,
MODE_PRIVATE爲默認參數,設置爲該參數後,寫入形式爲覆蓋式,即新寫入的內容會直接覆蓋掉原本的內容
MODE_APPEND參數,設置爲該參數後,寫入形式爲追加式,如果文件存在,即會在文件末尾添加新內容,而不會覆蓋原本內容,但需注意的是如果tag是相同的,依然會覆蓋掉
MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE這兩個參數設置後,即可允許別的程序訪問本程序的存儲數據,第一個是可讀,第二個是可寫
2.對象創建後,就要獲得對象的編輯器
Editor editor=share.edit();之後就可以通過該編輯器寫入數據了
editor.putString(“name”,”aaa”);第一個參數爲TAG即存儲的數據名稱,第二個參數是存儲的數據,之後用editor.commit()確認即可將數據寫入xml存儲
完整過程如下:
share=getSharedPreferences(“com.example.ui_demo”,mySelected);
Editor editor=share.edit();//獲取編輯器
editor.putString(“name”, name.getText().toString());
editor.putString(“id”,id.getText().toString());
editor.commit();//確認寫入
二、數據讀取
1.創建對象,和上面的一樣
2.直接通過對象獲得數據
share.getString(“name”,”“);第一個參數爲獲取的數據名稱,第二個參數爲缺省值,如果未取得該名稱數據就會返回第二個參數
三、不同應用讀取數據
讀取不同應用,首先要保證存儲模式是MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE這兩種形式,否則另外的應用是無法讀取的
具體的讀取方法如下
1.定義需要讀取數據所在應用的context
context=createPackageContext(“com.example.ui_demo”,Context.CONTEXT_IGNORE_SECURITY);
2定義sharedPreferences對象,通過1中Context來獲取
SharedPreferences shared=context.getSharedPreferences(“com.example.ui_demo”, Context.MODE_WORLD_READABLE);
之後的讀取過程與同一應用的讀取方式一致

四、DDMS的應用
爲了印證是否正確寫入,如果是仿真機的話就需要用到ddms了,首先點擊windows選項,選擇Open perspective選項中other,即可打開如下界面,選擇DDMS即可
這裏寫圖片描述
之後會跳轉到如下界面,選擇對應的仿真機後,點擊右側的選項卡到fileExplorer選項卡下,按照之前的目錄找到文件,在導出到電腦上進行查看

這裏寫圖片描述
導出方法點擊右上角的如下所示圖標即可
這裏寫圖片描述

四,示例代碼
Shared_prefdemo.java

package com.example.ui_demo;

import java.util.List;

import android.app.Activity;
import android.app.TabActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.TabHost.OnTabChangeListener;

public class SharedP_ref extends Activity {
    private String []str={"Mode_Private","Mode_Append","Mode_WorldRead","Mode_WorldWrite"};
    private Spinner sp;
    private ArrayAdapter<String> arrayAdapter;
    private int mySelected=-1;
    private Button write;
    private Button read;
    private SharedPreferences share;
    private EditText name;
    private EditText id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shared_p_ref);
        sp=(Spinner)this.findViewById(R.id.type);
        write=(Button)this.findViewById(R.id.write);
        read=(Button)this.findViewById(R.id.read);
        name=(EditText)this.findViewById(R.id.editName);
        id=(EditText)this.findViewById(R.id.editid);
        arrayAdapter=new ArrayAdapter<String>(SharedP_ref.this,android.R.layout.simple_spinner_item, str);
        //arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(arrayAdapter);
        sp.setOnItemSelectedListener(new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long id) {
                // TODO Auto-generated method stub
                String str=arg0.getItemAtPosition(position).toString();
                if(str=="Mode_Private"){
                   mySelected=Context.MODE_PRIVATE;
                }else if(str=="Mode_Append"){
                    mySelected=Context.MODE_APPEND;
                }else if(str=="Mode_WorldRead"){
                    mySelected=Context.MODE_WORLD_READABLE;
                }else if(str=="Mode_WorldWrite"){
                    mySelected=Context.MODE_WORLD_WRITEABLE;
                }else{
                    mySelected=-1;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                mySelected=-1;
            }

        });
        Mybutton m=new Mybutton();
        write.setOnClickListener(m);
        read.setOnClickListener(m);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.shared_p_ref, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public class Mybutton implements OnClickListener{

        @Override
        public void onClick(View vi) {
            // TODO Auto-generated method stub
            if(vi==write){

                if(mySelected!=-1){
                share=getSharedPreferences("com.example.ui_demo",mySelected);
                Editor editor=share.edit();//獲取編輯器
                editor.putString("name", name.getText().toString());
                editor.putString("id",id.getText().toString());
                editor.commit();//確認寫入
                }else{
                    Toast.makeText(SharedP_ref.this, "未選擇type",Toast.LENGTH_LONG).show();
                }
            }else if(vi==read){
                if(mySelected!=-1){
                    share=getSharedPreferences("com.example.ui_demo",mySelected);
                    String names=share.getString("name", "未找到");//若查詢不到會返回第二個參數
                    String s=share.getString("id", "未找到");//若查詢不到會返回第二個參數
                    Toast.makeText(SharedP_ref.this, names+s,Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(SharedP_ref.this, "未選擇type",Toast.LENGTH_LONG).show();
                }
            }
        }

    }
}

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.ui_demo.SharedP_ref" >

    <TextView
        android:id="@+id/Name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Name:" >

    </TextView>

    <EditText
        android:id="@+id/editName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="清輸入數值" >

    </EditText>
        <TextView
        android:id="@+id/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="id:" >

    </TextView>

    <EditText
        android:id="@+id/editid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="清輸入數值" >

    </EditText>

    <Spinner
        android:id="@+id/type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown" >

    </Spinner>
    <Button  
        android:id="@+id/write"
        android:text="寫入"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

    </Button>
     <Button  
        android:id="@+id/read"
        android:text="讀取"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

    </Button>
</LinearLayout>

otherActivity.java

package com.example.readothershared;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mybutton=(Button)this.findViewById(R.id.read);

        mybutton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Context context;
                //創建context
                try {
                    context=createPackageContext("com.example.ui_demo",Context.CONTEXT_IGNORE_SECURITY);
                    SharedPreferences shared=context.getSharedPreferences("com.example.ui_demo", Context.MODE_WORLD_READABLE);
                    String name=shared.getString("name", "未獲取到");
                    TextView myText=(TextView)MainActivity.this.findViewById(R.id.show);
                    myText.setText(name);
                } 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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章