iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Mobile Development

Android Studio開發系列 第 27

【DAY 27】元件整合實作:製作一個簡易的氣象資訊系統-3-透過SharedPreferences傳送註冊資料

  • 分享至 

  • xImage
  •  

上一篇文章我們已經將登入與註冊界面和按鈕功能做齊全了,接下來就要加入SharedPreferences方法,在註冊時設定傳入的資料,登入時則抓取這些資料,與輸入的資料進行比對。今天我們就來實作簡易的註冊功能。

首先,我們一樣先建立一個註冊頁面的shpf,這裡放入抓取和設定的方法。

public class enrollShpf {
    private static String Data="Data";
    private SharedPreferences shpf;
    private Context context;

    public enrollShpf(Context context){
        this.context=context;
        shpf=this.context.getSharedPreferences(String.valueOf(R.string.app_name), Context.MODE_PRIVATE);
    }
    //設定資料
    public void setData(String data){
        shpf.edit().putString(Data,data).apply();
    }
    //抓取資料
    public String getData(){
        return shpf.getString(Data,"");
    }
}

完成之後,我們到註冊的程式:
新增物件:

enshpf = new enrollShpf(this);

加入函式:

public void setDataOnClick() {
    //將帳號與密碼字串相連,並寫入
    enshpf.setData(String.valueOf(tveEmail.getText().toString()+tvePass.getText().toString()));
}

在註冊完成按鈕的程式碼中加入:

setDataOnClick();

然後是登入的程式:
新增物件:

enshpf = new enrollShpf(this);

在登入按鈕的程式碼中加入判斷:

if((tvEmail.getText().toString()+tvPass.getText().toString()).equals(enshpf.getData()))
{
    Toast.makeText(login.this, "登入成功!", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent();
    intent.setClass(login.this, MainActivity.class);
    startActivity(intent);
}
else
{
    Toast.makeText(login.this, "請輸入有效的帳號密碼,若忘記請重新註冊", Toast.LENGTH_SHORT).show();
}

至此,整個登入系統才算是完整了。
下面附上登入和註冊的所有程式碼:
login:

public class login extends AppCompatActivity {

    private enrollShpf enshpf;
    private Button btLogin,btClear,btEnroll;
    private EditText tvEmail,tvPass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        btLogin=findViewById(R.id.button3);
        btClear=findViewById(R.id.button);
        btEnroll=findViewById(R.id.button4);
        tvEmail=findViewById(R.id.editTextTextEmailAddress);
        tvPass=findViewById(R.id.editTextTextPassword);

        btClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //將帳號密碼設為空字串
                tvEmail.setText("");
                tvPass.setText("");
            }
        });

        btLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //判斷輸入的是否與註冊的帳號密碼一致,是則跳轉至主畫面
                if((tvEmail.getText().toString()+tvPass.getText().toString()).equals(enshpf.getData()))
                {
                    Toast.makeText(login.this, "登入成功!", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent();
                    intent.setClass(login.this, MainActivity.class);
                    startActivity(intent);
                }
                else
                {
                    Toast.makeText(login.this, "請輸入有效的帳號密碼,若忘記請重新註冊", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btEnroll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //跳轉頁面至註冊頁面
                Intent intent = new Intent();
                intent.setClass(login.this, enroll.class);
                startActivity(intent);
            }
        });
        enshpf = new enrollShpf(this);
    }
}

enroll:

public class enroll extends AppCompatActivity {

    private enrollShpf enshpf;
    private Button btCancel,btSent,btPass;
    private EditText tveEmail,tvePass,tvePass2;
    private CheckBox checkBox;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_enroll);

        btCancel=findViewById(R.id.button5);
        btSent=findViewById(R.id.button2);
        btPass=findViewById(R.id.button6);
        tveEmail=findViewById(R.id.editTextTextEmailAddress2);
        tvePass=findViewById(R.id.editTextTextPassword4);
        tvePass2=findViewById(R.id.editTextTextPassword2);
        checkBox=findViewById(R.id.checkBox);

        btSent.setEnabled(false);
        checkBox.setEnabled(false);

        btCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //關閉頁面
                finish();
            }
        });

        btPass.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(tveEmail.getText().toString().equals(""))
                {
                    Toast.makeText(enroll.this, "請輸入帳號", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    if(tvePass.getText().toString().equals(""))
                    {
                        Toast.makeText(enroll.this, "請輸入密碼", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        if(tvePass.getText().toString().equals(tvePass2.getText().toString()))
                        {
                            checkBox.setEnabled(true);
                            Toast.makeText(enroll.this, "密碼驗證成功!", Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            Toast.makeText(enroll.this, "密碼驗證失敗,請輸入相同之密碼", Toast.LENGTH_SHORT).show();
                            tvePass2.setText("");
                            checkBox.setEnabled(false);
                            checkBox.setChecked(false);
                        }
                    }
                }
            }
        });

        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                btSent.setEnabled(b);
            }
        });

        btSent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //設定資料,關閉頁面
                setDataOnClick();
                finish();
            }
        });
        enshpf = new enrollShpf(this);
    }
    public void setDataOnClick() {
        //將帳號與密碼字串相連,並寫入
        enshpf.setData(String.valueOf(tveEmail.getText().toString()+tvePass.getText().toString()));
    }
}

今天的實作就到這邊,下一篇文章我們將結合之前的API配合氣象局開放平台,做出簡易的各縣市氣溫查詢系統~~


上一篇
【DAY 26】元件整合實作:製作一個簡易的氣象資訊系統-2-登入及註冊按鈕功能
下一篇
【DAY 28】元件整合實作:製作一個簡易的氣象資訊系統-4-利用tablayout+viewpager及API+retrofit實作簡易氣象資訊系統(上)
系列文
Android Studio開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言