Android Studio の初心者の例: SharedPreferences ストレージを使用して QQ ログイン情報を保存する

この問題では、SharedPreferences を使用して QQ ログイン情報、つまり QQ ユーザーのアカウント パスワードを保存します。

前回はファイルストレージの使い方を内部と外部に分けて説明しました

SharedPreferences には、Set、String、int などのストレージ形式の制限があるため、理解しておく必要があります。

実験の結果は次のとおりです。

APP を開くと、SharedPreferences に保存されているアカウント パスワードが自動的に取得され、コントロールに表示されます。

「パスワードを保存する」にチェックを入れ、「ログイン」をクリックしてアカウントのパスワードを保存します

1 つ目は、SharedPreferences でデータを保存および読み取るためのツール クラスです (遅延、W3cschool を参照): SharedHelper

import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;

public class SharedHelper {

    private Context mContext;

    public SharedHelper() {
    }

    public SharedHelper(Context mContext) {
        this.mContext = mContext;
    }

    //定义一个保存数据的方法
    public void save(String username, String passwd) {
        SharedPreferences sp = mContext.getSharedPreferences("mysp", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("username", username);
        editor.putString("passwd", passwd);
        editor.commit();

    }

    //定义一个读取SP文件的方法
    public Map<String, String> read() {
        Map<String, String> data = new HashMap<String, String>();
        SharedPreferences sp = mContext.getSharedPreferences("mysp", Context.MODE_PRIVATE);
        data.put("username", sp.getString("username", ""));
        data.put("passwd", sp.getString("passwd", ""));
        return data;
    }
//清空SP
    public void clear(){
        SharedPreferences sp = mContext.getSharedPreferences("mysp", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        editor.commit();
    }
}

 インターフェースコード:

注: 丸みを帯びたアバターを実現するためにアバターで使用されているサードパーティ ライブラリ。ImageView に変更する必要がある場合があります。

<?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:background="#E6E6E6"
    android:orientation="vertical"
    android:padding="10dp">

    <com.makeramen.roundedimageview.RoundedImageView
        android:layout_marginTop="100dp"
        android:id="@+id/imageView1"
        android:layout_width="140dp"
        android:layout_height="140dp"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:scaleType="fitCenter"
        android:src="@drawable/a111"
        app:riv_border_color="#333333"
        app:riv_border_width="2dip"
        app:riv_corner_radius="30dip"
        app:riv_mutate_background="true"
        app:riv_oval="true"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:background="@android:color/white"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="账号:"
            android:textColor="#000"
            android:textSize="20sp" />
        <EditText

            android:id="@+id/et_account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:background="@null"
            android:padding="10dp" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@android:color/white"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="密码:"
            android:textColor="#000"
            android:textSize="20sp" />
        <EditText
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:background="@null"
            android:inputType="textPassword"
            android:padding="10dp" />
    </LinearLayout>

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="记住密码"
    android:id="@+id/cb"/>
    <Button
        android:onClick="function"
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:background="#3C8DC4"
        android:text="登录"
        android:textColor="@android:color/white"
        android:textSize="20sp" />

</LinearLayout>

 アクティビティロジックコード:

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Map;

public class MainActivity57 extends AppCompatActivity {
    private EditText et_account, et_password;
    private Button btn_login;
    private CheckBox cb;
    private SharedHelper sh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main57);
        et_account = findViewById(R.id.et_account);
        et_password = findViewById(R.id.et_password);
        cb = findViewById(R.id.cb);
        sh = new SharedHelper(MainActivity57.this);
        Map<String, String> data = sh.read();
        et_account.setText(data.get("username"));
        et_password.setText(data.get("passwd"));
        if(!et_account.getText().toString().isEmpty()){
            cb.setChecked(true);
        }

        btn_login = findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = et_account.getText().toString();
                String passwd = et_password.getText().toString();
                if (username.isEmpty() || passwd.isEmpty()) {
                    Toast.makeText(MainActivity57.this, "请输入完整账号密码", Toast.LENGTH_SHORT).show();
                } else {
                    if (cb.isChecked()) {
                        sh.save(username, passwd);
                    } else {
                        sh.clear();
                    }
                    Toast.makeText(MainActivity57.this, "登陆成功", Toast.LENGTH_SHORT).show();
                }


            }
        });
    }
}

その後の分析は後で追加されます。緊急に必要な場合は、コメント領域で思い出してください。

おすすめ

転載: blog.csdn.net/m0_59558544/article/details/130483292