在android应用程序开发的过程中,我们经常会遇到数据存取之类的问题,现在我就与大家分享一下我的经验!
现在我们要制作一个登录界面,其包括的功能:存储用户信息、如果勾选记住密码,会在登录之前保存 用户名密码到应用程序 /files/info.txt文件中.
正确的用户名和密码是:bmcq 123。
储存格式为:用户名##密码.
多话不说,来贴代码
antivity_main.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"
tools:context="com.bmcq.login.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入用户名" />
<EditText
android:id="@+id/et_user_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入密码" />
<EditText
android:inputType="textPassword"
android:id="@+id/et_user_pwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<CheckBox
android:id="@+id/cb_remember_pwd"
android:checked = "true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text = "记住密码"/>
<Button
android:onClick="login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="登录"/>
</RelativeLayout>
</LinearLayout>
Java代码.
MainActicity.java
package com.bmcq.login;
import java.util.Map;
import com.bmcq.login.serve.loginServes;
import android.R.string;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MainActivity";
private EditText et_user_name;
private EditText et_user_pwd;
private CheckBox cb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_user_name = (EditText)findViewById(R.id.et_user_name);
et_user_pwd = (EditText)findViewById(R.id.et_user_pwd);
cb = (CheckBox)findViewById(R.id.cb_remember_pwd);
//检查是否有保存的用户名及密码数据
Map<String, String> map = loginServes.getSavedUserInfo(this);
if (map!=null)
{
et_user_name.setText(map.get("user_name"));
et_user_pwd.setText(map.get("user_pwd"));
}
}
public void login(View v)
{
String name = et_user_name.getText().toString().trim() ;
String password = et_user_pwd.getText().toString().trim();
if (TextUtils.isEmpty(name)||TextUtils.isEmpty(password))
{
Toast.makeText(this, "登录名或用户密码不能为空", 1).show();
}
else
{
if (cb.isChecked())//判断是否保存密码
{
Log.i(TAG,"需要保存密码。");
Boolean result = loginServes.SaveUserInfo(this,name, password) ;
if (result)
{
Toast.makeText(this, "保存用户信息成功", 0).show();
}
}
if("bmcq".equals(name)&&"123".equals(password))
{
Toast.makeText(this, "登陆成功", 0).show();
}
else {
Toast.makeText(this, "登录名或用户密码错误", 1).show();
}
}
}
@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);
}
}
loginserves.java
package com.bmcq.login.serve;
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 java.net.ContentHandler;
import java.nio.MappedByteBuffer;
import java.util.HashMap;
import java.util.Map;
import android.R.string;
import android.content.Context;
public class loginServes {
/*
* 保存用户名和密码的业务方法
* @param user_name 用户名
* @param password 用户密码
*@ return true保存成功 false 保存失败
*@ getFileDire() /data/data/com.bmcq.login/File
*@ getCacheDir() /data/data/com.bmcq.login/Cache
*/
public static Boolean SaveUserInfo(Context context,String user_name,String user_pwd)
{
File file = new File(context.getFilesDir(),"info.txt");
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write((user_name+"##"+user_pwd).getBytes());
fos.close();
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
/*
* 获取保存的数据
*
*/
public static Map<String, String> getSavedUserInfo(Context context)
{
File file = new File(context.getFilesDir(),"info.txt");
try {
FileInputStream fis = new FileInputStream(file) ;
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String str = br.readLine();
//bmcq##123
String[] infos = str.split("##");
Map<String, String> map = new HashMap<String, String>();
map.put("user_name", infos[0]);
map.put("user_pwd", infos[1]);
return map;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
运行结果如下: