android登錄實現,存儲數據到/data/data/包名/info.txt
阿新 • • 發佈:2017-06-14
邏輯 保存到文件 技術分享 stream xtu d+ exception style fin
1.一個簡單登錄界面布局代碼如下:
@1采用線性布局加相對布局方式
@2線性布局采用垂直排列
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.market.login.MainActivity"> <EditText android:id="@+id/et_name" android:layout_marginTop="150dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/et_pwd"android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="match_parent" android:layout_marginTop="20dp" android:layout_height="wrap_content"> <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:layout_centerVertical="true" android:layout_height="wrap_content" android:text="是否記住密碼"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登錄" android:layout_marginRight="50dp" android:layout_centerHorizontal="true" android:layout_alignParentRight="true"/> </RelativeLayout> </LinearLayout>
界面效果如下:
2.代碼邏輯,分為MainActivity類和SaveUserInfo 工具類
分三步:初始化UI,初始化數據(加載),初始化控制器
@1主代碼如下
package com.market.login; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import java.util.Map; import static com.market.login.R.id.cb; public class MainActivity extends Activity { private Button btn; private EditText et_name; private EditText et_pwd; private CheckBox cb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); loadData(); } public void login(View v){ String name = et_name.getText().toString().trim(); String password = et_pwd.getText().toString().trim(); if(TextUtils.isEmpty(name) || TextUtils.isEmpty(password)){ Toast.makeText(this,"用戶名和密碼不能為空",Toast.LENGTH_SHORT).show(); }else{ if(cb.isChecked()) {//如果保存密碼和名 //開始保存,保存到文件,下次進來先讀取這個文件 SaveUserInfo.saveInfo(name,password,true); //提交用戶名和密碼給服務器 Log.v("Maintivity","提交用戶名和密碼給服務器"); }else{ SaveUserInfo.saveInfo("","",false); //直接提交用戶名和密碼給服務器 Log.v("Maintivity","直接提交用戶名和密碼給服務器"); } } } public void initView(){ btn = (Button)findViewById(R.id.btn); et_name = (EditText)findViewById(R.id.et_name); et_pwd = (EditText)findViewById(R.id.et_pwd); cb = (CheckBox)findViewById(R.id.cb); } public void loadData(){ Map<String, String> info = SaveUserInfo.readInfo(); if(info != null){ et_name.setText(info.get("name")); et_pwd.setText(info.get("password")); cb.setChecked(info.get("isChecked").equals("true"));//如果保存了信息,那他上次就是勾選的 } } }
@2保存數據到/data/data/包名/下文件的工具類
package com.market.login; import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; /** * 保存用戶信息的類,實現保存用戶信息到文件 * Created by Administrator on 2017/6/14. */ public class SaveUserInfo { /*保存用戶信息 * name:用戶名 * password:密碼 * isChecked:是否勾選保存密碼 * * */ public static boolean saveInfo(String name,String pwd,boolean isChecked){ String info = name+"#"+pwd+"#"+isChecked; File file = new File("/data/data/com.market.login/info.txt"); FileOutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(info.getBytes()); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if(fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } return false; } } /*讀取用戶信息*/ public static Map<String,String> readInfo(){ Map<String,String> map = null; File file = new File("/data/data/com.market.login/info.txt"); if(!file.exists()){ return map; } FileInputStream fis = null; BufferedReader br = null; try { fis = new FileInputStream(file); br = new BufferedReader(new InputStreamReader(fis)); String info = br.readLine(); Log.e("SaveUserInfo",info); String[] split = info.split("#"); map = new HashMap<String,String>(); map.put("name",split[0]);//保存讀取的用戶名和密碼到map中 map.put("password",split[1]); map.put("isChecked",split[2]); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if(fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if(br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } return map; } } }
3.運行效果,分三種情況
@1用戶名和密碼填寫有空
@2沒有勾選checkbox效果和退出後重新登入效果
@3勾選後效果和退出重新登入效果
android登錄實現,存儲數據到/data/data/包名/info.txt