android - 在 Android 应用程序中记住密码

标签 android

我在我的 android 应用程序中通过 soap web 服务使用 MySQL 连接开发了一个登录表单(用户名、密码和提交按钮)。在这里我想添加一个“记住密码字段”。 我在 Activity 的 XML 资源中编写了这段代码:

 <?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<EditText
    android:id="@+id/tf_userName"
    android:layout_width="194dp"
    android:layout_height="wrap_content"
    android:layout_x="106dp"
    android:layout_y="80dp" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="23dp"
    android:layout_y="93dp"
    android:text="User name" />



<EditText
    android:id="@+id/tf_password"
    android:layout_width="189dp"
    android:layout_height="wrap_content"
    android:layout_x="108dp"
    android:layout_y="161dp"
    android:inputType="textPassword" />

<TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="23dp"
    android:layout_y="176dp"
    android:text="Password" />
   <CheckBox android:layout_below="@+id/passwordview"
    android:layout_width="wrap_content" android:text="Remember Password!"
    android:layout_height="wrap_content" android:id="@+id/rempasswordcheckbox" 
    android:layout_x="23dp"
    android:layout_y="200dp" />

<Button
    android:id="@+id/btn_login"
    android:layout_width="106dp"
    android:layout_height="wrap_content"
    android:layout_x="50dp"
    android:layout_y="273dp"
    android:text="Login" />
<TextView
    android:id="@+id/TextView03"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="50dp"
    android:layout_y="350dp"
    android:text="Forget My password ?: Click here" />

<Button
    android:id="@+id/btn_reg"
    android:layout_width="106dp"
    android:layout_height="wrap_content"
    android:layout_x="175dp"
    android:layout_y="273dp"
    android:text="Register" />
 <Button
    android:id="@+id/btn_logout"
    android:layout_width="106dp"
    android:layout_height="wrap_content"
    android:layout_x="215dp"
    android:layout_y="25dp"
    android:text="Logout" />

<TextView
    android:id="@+id/tv_status"
    android:layout_width="151dp"
    android:layout_height="38dp"
    android:layout_x="26dp"
    android:layout_y="234dp"
    android:textAppearance="?android:attr/textAppearanceMedium" />

我的 Login.java 文件是:

package com.truebranches;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Login extends Activity {
private final String NAMESPACE = "http://ws.userlogin.com";
private final String URL = "http://192.168.1.168:8085/Login/services/Login?wsdl";
private final String SOAP_ACTION = "http://ws.userlogin.com/authentication";
private final String METHOD_NAME = "authentication";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    Button register = (Button) findViewById(R.id.btn_reg);
    register.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // Switching to Register screen
            Intent i = new Intent(getApplicationContext(), Register.class);
            startActivity(i);
        }
    });
    Button logout = (Button) findViewById(R.id.btn_logout);
    logout.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // Switching to Register screen
            Intent i = new Intent(getApplicationContext(), Login.class);
            startActivity(i);
        }
    });
    TextView forgetpassword = (TextView) findViewById(R.id.TextView03);
    forgetpassword.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // Switching to Register screen
            Intent i = new Intent(getApplicationContext(), ForgetPassword.class);
            startActivity(i);
        }
    });
    Button login = (Button) findViewById(R.id.btn_login);
    login.setOnClickListener(new View.OnClickListener() {

  public void onClick(View arg0) {
  loginAction();

  }
 });
 }

  private void loginAction(){
  SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    EditText userName = (EditText) findViewById(R.id.tf_userName);
    String user_Name = userName.getText().toString();
    EditText userPassword = (EditText) findViewById(R.id.tf_password);
    String user_Password = userPassword.getText().toString();

  //Pass value for userName variable of the web service
    PropertyInfo unameProp =new PropertyInfo();
    unameProp.setName("userName");//Define the variable name in the web service method
    unameProp.setValue(user_Name);//set value for userName variable
    unameProp.setType(String.class);//Define the type of the variable
    request.addProperty(unameProp);//Pass properties to the variable

  //Pass value for Password variable of the web service
    PropertyInfo passwordProp =new PropertyInfo();
    passwordProp.setName("password");
    passwordProp.setValue(user_Password);
    passwordProp.setType(String.class);
    request.addProperty(passwordProp);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try{
        androidHttpTransport.call(SOAP_ACTION, envelope);
           SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
           String status = response.toString();
           TextView result = (TextView) findViewById(R.id.tv_status);
           result.setText(response.toString());

           if(status.equals("Success!"))
            {
               Intent intent = new Intent(Login.this,HomePage.class);
               intent.putExtra("username",userName.getText().toString());
               startActivity(intent);


            }
           else
            {
               Intent i = new Intent(getApplicationContext(), Login.class);
               startActivity(i);
            }
           }



    catch(Exception e){

    }
   }

   }

但是我该如何创建 Java 代码呢?我似乎无法做到这一点。请指导我。

最佳答案

编辑----------------

import....
import android.widget.CheckBox;         // <--- Add
import android.content.SharedPreferences;   // <--- Add
import android.widget.EditText; // <--- Add
.
.
.
.
private static final String SPF_NAME = "vidslogin"; //  <--- Add this
private static final String USERNAME = "username";  //  <--- To save username
private static final String PASSWORD = "password";  //  <--- To save password
CheckBox chkRememberMe; //      <--- You even not taken CheckBox, SILLY WORKER
EditText etUserName, etPassword;    //      <--- You even not taken CheckBox,     SILLY WORKER

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    chkRememberMe = (CheckBox) findViewById(R.id.rempasswordcheckbox);  //      <---  Instantiate CheckBox...
    etUserName = (EditText) findViewById(R.id.tf_userName); //  <---  Instantiate     EditText...
    etPassword = (EditText) findViewById(R.id.tf_password); //  <---  Instantiate EditText...


    //  ADD THIS  TO  READ  SAVED  username & password  NEXT-TIME OPENING Application
    SharedPreferences loginPreferences = getSharedPreferences(SPF_NAME,
            Context.MODE_PRIVATE);
    etUserName.setText(loginPreferences.getString(USERNAME, ""));
    etPassword.setText(loginPreferences.getString(PASSWORD, ""));
.
.
.
.
.
.
private void loginAction() {
.
.
.
.
if (status.equals("Success!"))
{
    //   ADD  to save  and  read next time
        String strUserName = etUserName.getText().toString().trim();
        String strPassword = etPassword.getText().toString().trim();
        if (null == strUserName || strUserName.length() == 0)
                    {
            //  showToast("Enter Your Name");
            etUserName.requestFocus();
        } else if (null == strPassword || strPassword.length() == 0)
                    {
                //      showToast("Enter Your Password");
            etPassword.requestFocus();
        } else
                    {
            if (chkRememberMe.isChecked())
                            {
                SharedPreferences loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
                loginPreferences.edit().putString(USERNAME, strUserName).putString(PASSWORD, strPassword).commit();
            } else
                            {
                SharedPreferences loginPreferences = getSharedPreferences(SPF_NAME, Context.MODE_PRIVATE);
                loginPreferences.edit().clear().commit();
                            }
//      OVER

    Intent intent = new Intent(Login.this, HomePage.class);
    intent.putExtra("username", userName.getText().toString());
    startActivity(intent);
}

如果 YourCheckBox 发现 isChecked()==true

在登录按钮 onClick

只需将用户名和密码保存到SharedPreference。

Declare PREFRENCES_NAME = "Name You Like"
Save Data:-

SharedPreferences settings = getSharedPreferences(PREFRENCES_NAME, 0);
settings.edit().putString("name", strName).putString("pwd", strPass).commit();


Retrieve Data:-

SharedPreferences settings = getSharedPreferences(PREFRENCES_NAME, 0);
String name = settings.getString("name", "");
String password = settings.getString("pwd", "");


Clear Data:-

SharedPreferences settings = getSharedPreferences(
PREFRENCES_NAME, Context.MODE_PRIVATE);
settings.edit().clear().commit();

关于android - 在 Android 应用程序中记住密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537999/

相关文章:

php - 通过 API 保护来自 Android 应用程序的 GET 请求

android - API_UNAVAILABLE 谷歌 API 客户端

java - 从对话框 fragment 返回后,工具栏 View 引用变为空

android - 如何在选择文本时触发事件,例如启动应用程序

Android:杀死一个线程

android - 如何从命令行执行 "Build/Refresh Linked C++ Projects"?

android - 如何在没有 EasyTracker 的情况下停止 android 版 Google 移动分析 v2 中的 session

java - 我可以使用 KSoap2 将静态 XML 文件作为请求发送吗

Android通用Java类最佳实践

java - 使用 AspectJ 为父类(super class)方法添加功能