求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 

Android开发教程
Android 开发环境配置
Android 架构
Android 应用组件
Android Hello World示例
Android 资源组织和访问
Android Activity
Android Service
Android 广播接收器
Android 内容提供者
Android 碎片/片段
Android Intent过滤器
Android UI布局
Android UI控件
Android 事件处理
Android 样式和主题
Android 自定义组件
Android 拖放
Android 通知
Android 基于位置服务
Android 发送电子邮件
Android 发送短信/SMS
Android 拨打电话
发布Android应用
ndroid Alertdialog
Android Animation实例
Android音频捕获
Android音频管理器实例
Android
Android最佳实践
Android Bluetooth实例
Android Camera
Android Clipboard
Android自定义字体
Android数据备份
Android Gestures/手势
Android图片效果
Android图片切换
Android内部存储
Android JetPlayer实例
Android JSON解析器
Android加载Spinner
Android本地化
Android登录实例
Android MediaPlayer
 
 

Android登录实例
77 次浏览
18次  
 捐助

登录应用程序的屏幕,询问凭据登录到一些特定的应用。可能需要登录到Facebook,微博等

本章介绍了,如何创建一个登录界面,以及如何管理安全问题和错误尝试。

首先,必须定义两个TextView询问用户的用户名和密码。密码TextView必须inputType设置密码。它的语法如下:

<EditText
     android:id="@+id/editText2"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:inputType="textPassword" />
  <EditText
     android:id="@+id/editText1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"  />

定义具有登录文本的按钮,并设置其属性onClick。之后定义在java文件中的 onClick 属性中提到的功能。

<Button
     android:id="@+id/button1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:onClick="login"
     android:text="@string/Login"
   />

在java文件的onClick方法中使用gettext()得到用户名和密码,文本使用toString()方法,并用文字使用equals()函数相匹配。

EditText username = (EditText)findViewById(R.id.editText1);
    EditText password = (EditText)findViewById(R.id.editText2);
		  public void login(View view){
  if(username.getText().toString().equals("admin") &&
   password.getText().toString().equals("admin")){
  //correcct password
  }else{
  //wrong password
  }	

需要做的最后一件事是提供一种安全机制,所以应避免不必要的尝试。对于初始化一个变量,每个失败的尝试,它递减。而且,当它到达0时,禁止登录按钮。

int counter = 3;
    counter--;
    if(counter==0){
    //disble the button, close the application e.t.c  }

例子

这里有一个例子演示登录应用程序。它创建了一个基本的应用程序,只需三次尝试登录到一个应用程序。

为了试验这个例子,可以在实际设备或模拟器运行此应用程序。

以下是修改后的主活动文件的内容?src/com.yiibai.loginscreen/MainActivity.java.

package com.example.loginscreen;
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    public class MainActivity extends Activity {
     private EditText  username=null;
     private EditText  password=null;
     private TextView attempts;
     private Button login;
     int counter = 3;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        username = (EditText)findViewById(R.id.editText1);
        password = (EditText)findViewById(R.id.editText2);
        attempts = (TextView)findViewById(R.id.textView5);
        attempts.setText(Integer.toString(counter));
        login = (Button)findViewById(R.id.button1);
     }
       public void login(View view){
        if(username.getText().toString().equals("admin") &&
         password.getText().toString().equals("admin")){
        Toast.makeText(getApplicationContext(), "Redirecting...",
         Toast.LENGTH_SHORT).show();
     }
	     else{ 
       Toast.makeText(getApplicationContext(), "Wrong Credentials",
        Toast.LENGTH_SHORT).show(); 
       attempts.setBackgroundColor(Color.RED);
	        counter--;
        attempts.setText(Integer.toString(counter)); 
       if(counter==0){ 
          login.setEnabled(false); 
       }
       }
    }
     @Override
     public boolean onCreateOptionsMenu(Menu menu) { 
       // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
     }
    }

以下是经修改的XML的内容res/layout/activity_main.xml.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="@dimen/activity_vertical_margin"
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context=".MainActivity" >
       <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" 
       android:layout_centerHorizontal="true"
        android:layout_marginTop="18dp"
        android:text="@string/hello_world"
        android:textAppearance="?android:attr/textAppearanceLarge" />
       <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="50dp"
        android:text="@string/username"
        android:textAppearance="?android:attr/textAppearanceMedium" />
       <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_marginLeft="32dp"
        android:layout_toRightOf="@+id/textView2"
        android:ems="10" >
          <requestFocus />
     </EditText>
       <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2" 
       android:layout_marginTop="38dp"
        android:text="@string/password"
        android:textAppearance="?android:attr/textAppearanceMedium" />
       <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView3"
        android:layout_alignLeft="@+id/editText1"
        android:ems="10"
        android:inputType="textPassword" />
       <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="94dp"
        android:onClick="login"
        android:text="@string/Login" />
       <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="48dp"
        android:text="@string/attempts"
        android:textAppearance="?android:attr/textAppearanceMedium" />
       <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/textView1"
        android:layout_alignTop="@+id/textView4"
        android:text="TextView" />
    </RelativeLayout>

以下是?res/values/string.xml. 内容

<?xml version="1.0" encoding="utf-8"?>
    <resources>
       <string name="app_name">LoginScreen</string>
       <string name="action_settings">Settings</string>
       <string name="hello_world">Login Screen</string>
       <string name="username">Username:</string>
       <string name="password">Password:</string> 
      <string name="Login">Login:</string>
       <string name="attempts">Attempts Left:</string>
    </resources>

以下是?AndroidManifest.xml?的内容

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.yiibai.loginscreen"
     android:versionCode="1"
     android:versionName="1.0" >
       <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
       <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
           android:name="com.yiibai.loginscreen.MainActivity"
           android:label="@string/app_name" >
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
     </application>
    </manifest>

让我们试着来运行修改登录应用程序。安装程序在AVD并启动它,如果一切设置和应用程序都没有问题,它会显示以下仿真器窗口:

"http://www.yiibai.com/uploads/allimg/150129/125503H14-1.JPG">

键入用户名和密码字段,然后按登录按钮。把admin作为用户名和Nimda 为作为密码登陆。尝试失败。这如下所示:?

做到这两次,会看到有0留下的登录尝试并且登录按钮被禁用。

现在再次打开应用程序,这时候输入正确的用户名是admin,密码为admin和点击登录。将成功登录。

 



您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



77 次浏览
18次
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号