zoukankan      html  css  js  c++  java
  • 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>

    在android中有五种保存数据的方法。各自是:

    Shared Preferences
    Store private primitive data in key-value pairs.
    相应属性的键值对属性文件存储
    Internal Storage
    Store private data on the device memory.
    设备内存存储
    External Storage
    Store public data on the shared external storage.
    外部存储器存储,如内存卡
    SQLite Databases
    Store structured data in a private database.
    sqlite数据库存储
    Network Connection

    Store data on the web with your own network server.网络存储


    今天这一节我们一起来学习Shared Preferences 属性文件存储的方式来存储简单的数据

    我们能够使用Shared Preferences 来存储 booleans, floats, ints, longs, and strings型的简单数据并以键值对的形式保存为xml文件。


    为了实例化Shared Preferences 我们能够使用

    getSharedPreferences()getPreferences() 这两个方法

    第一个方法须要传入一个文件名称和存储的模式

    另外一种方法默觉得仅仅有一个属性文件,仅仅须要传入一个存储模式即可了


    存储模式 :

    MODE_PRIVATE仅本应用可用

    MODE_APPEND追加

     MODE_WORLD_READABLE,可被其它应用读

    MODE_WORLD_WRITEABLE.可被其它应用写


    详细操作见代码凝视



    xml文件

    <RelativeLayout 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: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=".MainActivity" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="89dp"
            android:text="存储信息" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button1"
            android:layout_marginTop="36dp"
            android:text="读取信息" />
    
    </RelativeLayout>
    

    JAVA文件


    package com.example.sharedpreferences;
    
    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    	private SharedPreferences sharedPreferences;
    	private Button saveData, getDate;
    	public static final String FILENAME = "flyou";
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		sharedPreferences = getSharedPreferences(FILENAME, MODE_PRIVATE);
    		saveData = (Button) this.findViewById(R.id.button1);
    		getDate = (Button) this.findViewById(R.id.button2);
    		saveData.setOnClickListener(new View.OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				SharedPreferences.Editor editor = sharedPreferences.edit();
    				editor.putString("username", "jay");
    				editor.putString("password", "553274238");
    				Boolean flag = editor.commit();
    				Toast.makeText(MainActivity.this, "运行完毕,运行结果:-->" + flag, 2)
    						.show();
    			}
    		});
    		getDate.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				String username = sharedPreferences.getString("username",
    						"未找到匹配信息");
    				String password = sharedPreferences.getString("password",
    						"未找到用户密码");
    				Toast.makeText(MainActivity.this,
    						"用户名:——>" + username + ",密码:——>" + password, 2).show();
    			}
    		});
    	}
    }
    




    接下来使用改方法来实现本地记住账号和password的功能

    里面可能会涉及到一些没有讲到的知识,大家能够先了解下,也对前面学过的其它组件进行一下回想


    xml文件

    主界面

    <RelativeLayout 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: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=".MainActivity" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="19dp"
            android:layout_marginTop="42dp"
            android:text="username" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="58dp"
            android:text="密    码" />
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView1"
            android:layout_alignBottom="@+id/textView1"
            android:layout_marginLeft="40dp"
            android:layout_toRightOf="@+id/textView1"
            android:ems="10" >
    
            <requestFocus />
        </EditText>
    
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView2"
            android:layout_alignBottom="@+id/textView2"
            android:layout_alignLeft="@+id/editText1"
            android:ems="10"
            android:inputType="textPassword" />
    
        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/button1"
            android:layout_alignRight="@+id/editText2"
            android:text="记住password" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button1"
            android:layout_alignBottom="@+id/button1"
            android:layout_alignParentLeft="true"
            android:text="注冊账号" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/checkBox1"
            android:text="登录" />
    
    </RelativeLayout>
    

    登录后界面

    <?

    xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Medium Text" android:textAppearance="?

    android:attr/textAppearanceMedium" /> </LinearLayout>


    JAVA文件

    package com.example.sharepreferencesdemo;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    
    public class MainActivity extends Activity {
    	private SharedPreferences sharedPreferences;
    	private Button login;
    	private CheckBox checkBox;
    	private EditText username, password;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		login = (Button) this.findViewById(R.id.button1);
    		checkBox = (CheckBox) this.findViewById(R.id.checkBox1);
    		username = (EditText) this.findViewById(R.id.editText1);
    		password = (EditText) this.findViewById(R.id.editText2);
    		sharedPreferences = getPreferences(MODE_PRIVATE);// 通过getPreferences实例化sharedPreferences对象
    
    		String usernameString = sharedPreferences.getString("username", "");// 读取用户名
    		username.setText(usernameString);// 为编辑框设置内容
    
    		// 获取复选框的选中状态,假设选中的话就 进行记住密码的操作
    		if (sharedPreferences.getBoolean("checked", false)) {
    			// 获取密码
    			String passwordString = sharedPreferences.getString("password", "");
    			// 设置编辑框信息
    			password.setText(passwordString);
    		}
    
    		login.setOnClickListener(new View.OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				// 通过edit 方法实例化Editor对象,储存信息
    				SharedPreferences.Editor editor = sharedPreferences.edit();
    				// 以键值对的形式储存信息
    				editor.putString("username", username.getText().toString());
    				editor.putString("password", password.getText().toString());
    				// 推断复选框的选中状态并进行存储
    				if (checkBox.isChecked()) {
    					editor.putBoolean("checked", true);
    				} else {
    					editor.putBoolean("checked", false);
    				}
    				// 运行储存操作
    				editor.commit();
    
    				// 设置进度对话框
    				final ProgressDialog dialog = new ProgressDialog(
    						MainActivity.this);
    				// 设置标题
    				dialog.setTitle("用户登录");
    				// 设置提示信息
    				dialog.setMessage("正在登录。请稍后……");
    				// 開始进度对话框
    				dialog.onStart();
    				// 延时线程操作
    				new Thread() {
    
    					@Override
    					public void run() {
    						// TODO Auto-generated method stub
    						try {
    							// 休眠3秒
    							Thread.sleep(3 * 1000);
    						} catch (InterruptedException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						} finally {
    							// 对话框消失
    							dialog.dismiss();
    							// 设置意图转跳
    							Intent intent = new Intent(MainActivity.this,
    									main.class);
    
    							// 传递意图信息
    							intent.putExtra("username", username.getText()
    									.toString());
    							// 開始activity转跳
    							startActivity(intent);
    							MainActivity.this.finish();
    						}
    					}
    				}.start();// 開始线程操作
    				// 显示对话框
    				dialog.show();
    
    			}
    		});
    
    	}
    }
    

    登陆后的界面


    package com.example.sharepreferencesdemo;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.widget.TextView;
    
    public class main extends Activity {
    	private TextView text;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		super.setContentView(R.layout.linearlayout);
    		text=(TextView)this.findViewById(R.id.textView3);
    		Intent intent=getIntent();
    		text.setTextSize(15);
    		text.setGravity(Gravity.CENTER_HORIZONTAL);
    		text.setTextColor(Color.CYAN);
    		text.setText("欢迎: "+intent.getStringExtra("username"));
    	}
    }
    





    未点击记住password,第二次登录。


    点击记住password登录


    点击记住password后。第三次登录



    介绍了SharedPreferences属性文件的存储,我们能够进行较小数据的高速存储与便捷读取


    下节预报:Internal Storage内部存储器

  • 相关阅读:
    第一个Django demo
    内建函数
    Git积累
    区间dp
    【Spring】Spring AOP详解(转载)
    【git】git 常用命令(含删除文件)
    【idea】idea如何在maven工程中引入jar包
    【Java】Scanner类nextInt后使用nextLine无法读取输入
    【Java_Eclipse】Eclipse插件如何卸载?
    【MySQL】MySQL5.7等以上版本在Windows上的配置
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5142944.html
Copyright © 2011-2022 走看看