標籤:android layout
在編寫安卓登入介面時,我們如何記住密碼,方便下一次登入呢?
首先,先建立一個安卓項目(我的版本是4.4.2的),名字為"記住密碼"
然後在res檔案夾下找到layout檔案夾,找到activity_main.xml或fragment_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.csdn.www.MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="使用者名稱" /> <EditText android:id="@+id/username" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="密碼" /> <EditText android:id="@+id/userpass" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:password="true" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="73dp" android:text="登陸" /> <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:checked="true" android:text="記住密碼" /> </RelativeLayout></LinearLayout>
視圖效果:
在src下的java檔案裡建立一個SaveFile.java類,旨在記住密碼之後如何儲存使用者名稱、密碼和擷取儲存資料
package com.csdn.www;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.util.HashMap;import java.util.Map;import android.content.Context;public class SaveFile {public static boolean save(Context context,String name,String pass){try {//File f=new File("/data/data/com/csdn/www/info.txt");File f=new File(context.getFilesDir(),"info.txt");//context.getFilesDir();//返回一個目錄 /data/data/包名/filesFileOutputStream fos=new FileOutputStream(f);fos.write((name+"=="+pass).getBytes());fos.close();return true;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}/** * 擷取儲存的資料 * @param context * @return */public static Map<String,String> getSaveFiles(Context context){File f=new File(context.getFilesDir(),"info.txt");try {FileInputStream fis=new FileInputStream(f);BufferedReader br=new BufferedReader(new InputStreamReader(fis));String str=br.readLine();String[] infos=str.split("==");Map<String,String> map=new HashMap<String,String>();map.put("username", infos[0]);map.put("userpass", infos[1]);return map;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}}}
最後在src下的java檔案裡MainActivity.java
package com.csdn.www;import java.util.Map;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.text.TextUtils;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;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 username, userpass;private CheckBox checkBox1;private Button login;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);username = (EditText) this.findViewById(R.id.username);userpass = (EditText) this.findViewById(R.id.userpass);checkBox1 = (CheckBox) this.findViewById(R.id.checkBox1);Map<String, String> map=SaveFile.getSaveFiles(this);if(map!=null){username.setText(map.get("username"));userpass.setText(map.get("userpass"));}login = (Button) findViewById(R.id.login);login.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String un = username.getText().toString().trim();String up = userpass.getText().toString().trim();if (TextUtils.isEmpty(un) || TextUtils.isEmpty(up)) {Toast.makeText(MainActivity.this, "使用者名稱或密碼不可為空",Toast.LENGTH_SHORT).show();} else {// 登陸//是否儲存密碼if (checkBox1.isChecked()) {// 儲存使用者名稱和密碼Log.i(TAG, "需要儲存使用者名稱密碼");boolean flag=SaveFile.save(MainActivity.this,un, up);if(flag){Toast.makeText(MainActivity.this, "資訊儲存成功", 0).show();}}// 登陸發送訊息到伺服器,伺服器驗證是否正確if ("zhangsan".equals(un) && "123".equals(up)) {Toast.makeText(MainActivity.this, "登陸成功",Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "使用者名稱或密碼錯誤",Toast.LENGTH_SHORT).show();}}}});}@Overridepublic 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;}}
會顯示“資訊儲存成功”,“使用者名稱或密碼錯誤”
在Eclipse中的”File Explorer“裡,目錄”data/data/com/csdn/www/info.txt“,使用者名稱和密碼會儲存在info.txt裡