2012-07-18 61 views
1

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

<?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代码?我似乎无法做到这一点。请指导我。

+0

我想你要保存的密码登录上点击按钮??? – 2012-07-18 10:01:04

+0

s我需要dis one ...我该怎么办 – 2012-07-18 10:10:16

回答

5

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

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()==真

在登录按钮的时间的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(); 
+0

您好现在阅读我的questions.tell我如何检查在我的编码部分上面的rememberpassword。 – 2012-07-18 09:49:39

+0

记住密码意味着如果我输入用户名和密码,然后启用记住密码复选框意味着它成功login.then我点击注销意味着它是注销。但再次我打开D应用程序意味着用户名和密码显示在D edittext知道。 ..但是当我注销DIS应用程序退出后,我再次打开D应用程序意味着用户名和密码不会保存。 – 2012-07-18 11:12:08

+0

其实它被保存。但是,在启动应用程序时,您不读取SharedPreferences SPF_NAME,也未填写用户名和密码的EditText中的值。 – 2012-07-18 11:18:07

1

如果复选框被选中,同时登录

  • local storage
  • 密码找回在运行时,只要登录活动启动
0

使用SharedPreferences是要走的最简单的方法。

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString(PREFERENCE_IDENTIFIER, usersPassword); 
editor.commit(); 

条件

if (rememberPasswordCheckbox.isChecked()) { 
// save password here 
}