• Android数据存储方式(一)SharedPerfences


          SharedPreferences,是android提供用来存储一些简单的配置信息的一种机制。以键值对的形式存储基本的数据类型。(boolean,int,float,long,String).

          应用的地方:应用程序,”设置“,”首选项“界面的保存;登陆用户名和密码;保存上一次用户的修改;自定义参数的设置。

          注意: 一个应用程序的配置文件只能在本应用程序中使用,只能在同一个包,不能在不同的包使用。

            1根据文件名获取指定的SharePrefrerences对象

                Context.getSharedPreferences(String name,int mode)

                参数说明:name:为Prefercences的文件名字。若不存在,在提交数据时自动创建Prefercences。处在同一应用程序的其他组件可以通过指定文件名字共享Prefercences。

                              mode:指定文件的操作模式。

                                       Context.MODE_PRIVATE 只能由应用程序调用,默认”0“。

                                       Context.MODE_WORLD_READABLE 允许所有应用程序有读取文件的权限,默认”1“。

                                       Context.MODE_PRIVATE_WRITEABLE 允许所有应用程序有写入文件的权限,默认”2“。

         SharePreferences保存数据的步骤:

            1获取对象。通过SharePreferences接口的edit获得SharePreferences.Editor的对象。

            2保存信息。通过对象SharePreferences.Editor的接口putXXX方法保存Key-value.

            3提交信息。通过SharePreferences.Editor接口的commit方法保存Key-value。

       查看结果:

           SharedPreferences采用XML格式将数据存储到设备中。保存在DDMS的File Explorer中的/data/data<包名>/shares_prefs下。

           

    代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
    
    
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:text="用户名:" android:id="@+id/TextView01"
                android:layout_weight="3" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>
            <EditText android:text="" android:id="@+id/nameET"
                android:layout_weight="7" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></EditText>
        </LinearLayout>
    
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:text="密 码:" android:id="@+id/TextView01"
                android:layout_weight="3" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>
            <EditText android:text="" android:id="@+id/passwordET"
                android:password="true" android:layout_weight="7"
                android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
        </LinearLayout>
    
        <LinearLayout android:id="@+id/LinearLayout03"
            android:layout_width="fill_parent" android:layout_height="wrap_content">
            <TextView android:text="" android:id="@+id/TextView01"
                android:layout_weight="3" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>
            <Button android:id="@+id/loginBtn" android:layout_width="wrap_content"
                android:text="登陆" android:layout_height="wrap_content"></Button>
            <Button android:text="退出" android:id="@+id/stopBtn"
                android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
        </LinearLayout>
    </LinearLayout>

           

    package com.dream;
    
    import android.app.Activity;
    import android.content.DialogInterface;
    import android.content.SharedPreferences;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class SharedPreferencesTestActivity extends Activity implements android.view.View.OnClickListener {
        /** Called when the activity is first created. */
        //定义变量接收四个控件
        private EditText nameET = null;
        private EditText passwordET = null;
        private Button loginBtn = null;
        private Button stopBtn = null;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //获取四个控件的ID
            nameET=(EditText) findViewById(R.id.nameET);
            passwordET =(EditText) findViewById(R.id.passwordET);
            loginBtn =(Button)findViewById(R.id.loginBtn);
            stopBtn =(Button)findViewById(R.id.stopBtn);
          //在activity创建时候从Prefercens恢复登陆信息到EditText。
            //获取Activity的Preferences对象
            SharedPreferences sp = getPreferences(MODE_PRIVATE);
            //从Preferences对象中获取登陆信息并显示到EditText中
            nameET.setText(sp.getString("loginName", ""));
            passwordET.setText(sp.getString("password", ""));
             //设置监听
            loginBtn.setOnClickListener(this);
            stopBtn.setOnClickListener(this);
            
        }
       @Override
        protected void onStop(){
            //接受EidtText的值
            String name = nameET.getText().toString();
            String password = passwordET.getText().toString();
            //定义SharedPreferences.Editor接口对象
            SharedPreferences.Editor edit = getPreferences(0).edit();
            //吧登陆信息保存到preferences中
            edit.putString("loginName", name);
            edit.putString("password", password);
            //提交信息
            edit.commit();
            super.onStop();
        }
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //判断传过来的监听事件。
            switch(v.getId()){
            case R.id.loginBtn:
                Toast.makeText(this, "登陆成功", Toast.LENGTH_LONG).show();
                break;
            case R.id.stopBtn:
    finish();
    break; default: break; } } }

        遇到的问题:空指针异常。没有获取ID就。定义了Preferences的对象。造成了空指针异常。

  • 相关阅读:
    vijos1198:最佳课题选择
    vijos1071:新年趣事之打牌
    vijos1153:猫狗大战
    bzoj3594: [Scoi2014]方伯伯的玉米田
    bzoj2753: [SCOI2012]滑雪与时间胶囊
    bzoj1923: [Sdoi2010]外星千足虫
    bzoj2783: [JLOI2012]树
    bzoj4590: [Shoi2015]自动刷题机
    bzoj4580: [Usaco2016 Open]248
    bzoj4579: [Usaco2016 Open]Closing the Farm
  • 原文地址:https://www.cnblogs.com/LuckStarShine/p/2579582.html
Copyright © 2020-2023  润新知