android學習筆記----模擬登錄界面(文件和SharedPreferences存儲)

記錄學習筆記:html

目錄java

1.SharedPreferences存儲
android

2.文件存儲:git


SharedPreferences存儲源碼(QQlogin2):https://github.com/liuchenyang0515/QQlogin2github

文件存儲源碼(QQlogin):https://github.com/liuchenyang0515/QQlogin
api


1.SharedPreferences存儲

界面以下:服務器

MainActivity.javaapp

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    /**
     * 定義一個共享參數(存放數據方便的api)
     */
    private SharedPreferences sp;
    private String TAG = "MainActivity";
    private EditText et_qqnumber;
    private EditText et_passwd;
    private CheckBox cb_remember;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_qqnumber = (EditText) findViewById(R.id.et_qqnumber);
        et_passwd = (EditText) findViewById(R.id.et_passwd);
        cb_remember = (CheckBox) findViewById(R.id.cb_remember);
        sp = this.getSharedPreferences("config", MODE_PRIVATE);
        restoreInfo();
    }

    /**
     * 根據原來保存的文件信息,把QQ號碼和密碼信息顯示到界面
     */
    private void restoreInfo() {
        String qq = sp.getString("qq", "");
        String passwd = sp.getString("passwd", "");
        boolean isRemember = sp.getBoolean("remember", false);
        Log.d(TAG, "qq:" + qq);
        Log.d(TAG, "passwd:" + passwd);
        et_qqnumber.setText(qq);
        et_passwd.setText(passwd);
        cb_remember.setChecked(isRemember); // 恢復時也把記住密碼的勾選上
    }

    /**
     * 登陸按鈕的點擊事件
     *
     * @param view
     */
    public void login(View view) {
        String qq = et_qqnumber.getText().toString().trim();
        String passwd = et_passwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(passwd)) {
            Toast.makeText(this, "用戶名和密碼不能爲空", Toast.LENGTH_SHORT).show();
            return;
        } else {
            // 登陸操做,模擬登錄,數據應該提交給服務器比較是否正確
            if ("10000".equals(qq) && "123456".equals(passwd)) {
                // 是否須要記住密碼
                // 將數據保存到sp文件中
                SharedPreferences.Editor edit = sp.edit();
                if (cb_remember.isChecked()) {
                    edit.putString("qq", qq);
                    edit.putString("passwd", passwd);
                    edit.putBoolean("remember", true);
                } else {
                    edit.clear(); // 沒有勾選記住密碼就清空SharedPreferences文件數據
                }
                edit.apply(); // 提交數據,相似於關閉流,事務
                Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "登錄失敗", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

xml文件參考以下:
ide

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/qq" />

    <EditText
        android:id="@+id/et_qqnumber"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請輸入QQ號碼"
        android:inputType="number"
        android:selectAllOnFocus="false" />

    <EditText
        android:id="@+id/et_passwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="請輸入QQ密碼"
        android:inputType="textPassword" />

    <CheckBox
        android:id="@+id/cb_remember"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="記住密碼" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="login"
        android:text="登陸" />

</LinearLayout>

存儲config.xml以下:函數

====================================================================


2.文件存儲:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends AppCompatActivity {

    private EditText et_qqnumber;
    private EditText et_passwd;
    private CheckBox cb_remember;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_qqnumber = (EditText) findViewById(R.id.et_qqnumber);
        et_passwd = (EditText) findViewById(R.id.et_passwd);
        cb_remember = (CheckBox) findViewById(R.id.cb_remember);
        restoreInfo();
    }

    /**
     * 根據原來保存的文件信息,把QQ號碼和密碼信息顯示到界面
     */
    private void restoreInfo() {
        // File file = new File(this.getFilesDir(), "info.txt");
        // 用openFileInput就不須要判斷file.exists() && file.length() > 0了
        // 函數封裝會處理的
        // 自動關流寫法要jdk1.7及以上
        try (//FileInputStream fis = new FileInputStream(file);
             FileInputStream fis = openFileInput("info.txt");
             BufferedReader br = new BufferedReader(new InputStreamReader(fis));) {
            String line = br.readLine();
            if (line != null){
                String[] info = line.split("##");
                String qq = info[0];
                String pwd = info[1];
                et_qqnumber.setText(qq);
                et_qqnumber.setSelection(qq.length());
                et_passwd.setText(pwd);
                cb_remember.setChecked(true);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 登陸按鈕的點擊事件
     *
     * @param view
     */
    public void login(View view) {
        String qq = et_qqnumber.getText().toString().trim();
        String passwd = et_passwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(passwd)) {
            Toast.makeText(this, "用戶名和密碼不能爲空", Toast.LENGTH_SHORT).show();
            return;
        } else {
            // 是否須要記住密碼
            try (
                    //FileOutputStream fos = new FileOutputStream(new File(this.getFilesDir(), "info.txt"));
                    FileOutputStream fos = openFileOutput("info.txt", MODE_PRIVATE);
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos));) {
                // 登陸操做,模擬登錄,數據應該提交給服務器比較是否正確
                if ("10000".equals(qq) && "123456".equals(passwd)) {
                    Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
                    if (cb_remember.isChecked()) {
                        // 被選中狀態,須要記住密碼
                        String info = qq + "##" + passwd;
                        //fos.write(info.getBytes());
                        writer.write(info);
                    } else {
                        writer.write(""); // 空文件
                    }
                } else {
                    Toast.makeText(this, "登錄失敗", Toast.LENGTH_SHORT).show();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

筆記批註:若是想要修改文件的權限的話,能夠進入到相應的目錄,而後例如:chmod 777 private.txt就能夠把權限改成

-rwxrwxrwx,每個權限組都是3位2進制數。


========================================Talk is cheap, show me the code=======================================

相關文章
相關標籤/搜索