Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话《在内存中存储用户名和密码》
那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件。为了引起误导,声明实际开发中不会用到这两种方式,这里指示提供一种思路和给初学者学习简单的api。
由于内容和之前的基本一样,不做过多的解释。直接上代码:
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: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" android:orientation="vertical" > <EditText android:id="@+id/et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" /> <EditText android:id="@+id/et_pass" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="请输入密码" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="记住用户名和密码" android:layout_centerVertical="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:text="登录" android:layout_alignParentRight="true" android:onClick="login" /> </RelativeLayout> </LinearLayout>
接着是mainactivity:
package com.itydl.rwinrom; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import org.apache.http.entity.InputStreamEntity; import com.itheima.sharedpreference.R; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.view.Menu; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_name; private EditText et_pass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_name = (EditText) findViewById(R.id.et_name); et_pass = (EditText) findViewById(R.id.et_pass); readAccount();//打开程序回显保存的数据 } public void readAccount(){ SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE); String name = sp.getString("name", "");//get数据的时候,不用判定文件是否存在了。因为文件没有文件的话就得带一个空字符串 "" String pass = sp.getString("pass", ""); et_name.setText(name); et_pass.setText(pass); } public void login(View v){ String name = et_name.getText().toString(); String pass = et_pass.getText().toString(); CheckBox cb = (CheckBox) findViewById(R.id.cb); //判断选框是否被勾选 if(cb.isChecked()){ //使用sharedPreference来保存用户名和密码 //路径在data/data/com.itydl.sharedpreference/share_ SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE); //拿到sp的编辑器 Editor ed = sp.edit(); //使用编辑器存取数据,数据是以键值对的方式存取的 ed.putString("name", name); ed.putString("pass", pass); //提交 ed.commit(); } //创建并显示吐司对话框 Toast.makeText(this, "登录成功", 0).show(); } }
保存的路径截图:
运行结果:
再次进入该程序后,数据也会回显成功