Снабжаем приложение функцией входа по логину/паролю
Главная » Снабжаем приложение функцией входа по логину/паролю

В этом уроке мы продолжим увеличивать свои способности в настройке пользовательского интерфейса своих приложений и оборудовать их все более серьезными вещами. На этот раз мы оснастим свое Android приложение функцией входа в приложение по вводу логина и пароля. Это может пригодится для многих приложений, да и просто интересно, как это делается. Все довольно просто, ничего сложного в реализации этой возможности не будет. 

Мы сделаем приложение, при запуске которого нужно будет выполнить вход с помощью ввода логина и пароля - если данные введены верно мы попадаем на другой экран, если не правильно, то видим сообщение об ошибке. 

Здесь пригодится вспомнить простенький урок о переходе между двумя экранами, этот прием встречался уже неоднократно, поэтому разъяснений по нему делать уже не буду.

Создаем новый проект, выбираем Blank Activity. Для начала создадим пользовательский интерфейс для приложения. Он будет состоять из полей ввода логина/пароля и кнопки для совершения входа. Открываем файл activity_main.xml и добавляем туда следующее:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 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">

 <TextView
 android:id="@+id/Login"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 android:layout_marginTop="20dp"
 android:text="Авторизация"
 android:textAppearance="?android:attr/textAppearanceLarge" />

 <TextView
 android:id="@+id/user_text"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:layout_below="@+id/Login"
 android:layout_marginTop="75dp"
 android:layout_marginLeft="10dp"
 android:text="Пользователь:"
 android:textAppearance="?android:attr/textAppearanceMedium" />

 <EditText
 android:id="@+id/edit_user"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignBottom="@+id/user_text"
 android:layout_marginLeft="35dp"
 android:layout_toRightOf="@+id/user_text"
 android:hint="введите имя " >
 <requestFocus />
 </EditText>

 <TextView
 android:id="@+id/password_text"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignLeft="@+id/user_text"
 android:layout_below="@+id/user_text"
 android:layout_marginTop="40dp"
 android:text="Пароль:"
 android:textAppearance="?android:attr/textAppearanceMedium" />

 <EditText
 android:id="@+id/edit_password"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignBottom="@+id/password_text"
 android:layout_alignLeft="@+id/edit_user"
 android:layout_alignRight="@+id/edit_user"
 android:hint="введите пароль"
 android:inputType="textPassword" />

 <TextView
 android:id="@+id/attempts"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignLeft="@+id/password_text"
 android:layout_below="@+id/password_text"
 android:layout_marginLeft="30dp"
 android:layout_marginTop="48dp"
 android:text="Попыток:"
 android:visibility="invisible"
 android:textAppearance="?android:attr/textAppearanceMedium" />

 <Button
 android:id="@+id/button_login"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@+id/edit_password"
 android:layout_centerHorizontal="true"
 android:layout_marginTop="94dp"
 android:onClick="Login"
 android:text="Войти" />

 <TextView
 android:id="@+id/number_of_attempts"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignRight="@+id/user_text"
 android:layout_alignTop="@+id/attempts"
 android:visibility="invisible" />

 <TextView
 android:id="@+id/login_locked"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textAppearance="?android:attr/textAppearanceMedium"
 android:visibility="invisible"
 android:layout_alignParentBottom="true"
 android:layout_marginBottom="57dp"
 android:layout_alignRight="@+id/edit_password"
 android:layout_alignEnd="@+id/edit_password"
 android:layout_alignLeft="@+id/attempts"
 android:layout_alignStart="@+id/attempts" />

</RelativeLayout>

Мы получили вот такой вид пользовательского интерфейса:

Видок андроид приложения

Сразу разберемся со вторым экраном, на который будет совершаться переход в случае успешного ввода логина и пароля. Создаем новый класс по имени Second.java:

import android.app.Activity;
import android.os.Bundle;


public class Second extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.second_activity);
 }
}

И соответствующий ему layout файл по имени second_activity.xml:

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

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Вы успешно залогинились!"
 android:padding="5pt"
 android:layout_gravity="center"
 android:textSize="12pt"/>

</LinearLayout>

Ну а теперь переходим к файлу основному MainActivity.java. Основной процесс будет происходить в методе обработки нажатия кнопки "Войти". В нем мы сравниваем введенные логин и пароль со словом admin и в зависимости от их совпадения или не совпадения настраиваем дальнейшие действия. Если введены логин и пароль admin, то высвечивается Toast сообщение об успехе входа и выполняется переход на второй экран с помощью Intent. Если данные введены не верно, то высвечивается сообщение с ошибкой, а после 3 неудачных попыток появляется надпись, что количество попыток исчерпано, а кнопка "Войти" становится неактивной. Итак, чтобы реализовать сказанное, открываем файл MainActivity.java и добавляем в него следующий код:

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

 // Объявляем об использовании следующих объектов:
 private EditText username;
 private EditText password;
 private Button login;
 private TextView loginLocked;
 private TextView attempts;
 private TextView numberOfAttempts;

 // Число для подсчета попыток залогиниться:
 int numberOfRemainingLoginAttempts = 3;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 // Связываемся с элементами нашего интерфейса:
 username = (EditText) findViewById(R.id.edit_user);
 password = (EditText) findViewById(R.id.edit_password);
 login = (Button) findViewById(R.id.button_login);
 loginLocked = (TextView) findViewById(R.id.login_locked);
 attempts = (TextView) findViewById(R.id.attempts);
 numberOfAttempts = (TextView) findViewById(R.id.number_of_attempts);
 numberOfAttempts.setText(Integer.toString(numberOfRemainingLoginAttempts));

 }

 // Обрабатываем нажатие кнопки "Войти":
 public void Login(View view) {

 // Если введенные логин и пароль будут словом "admin",
 // показываем Toast сообщение об успешном входе:
 if (username.getText().toString().equals("admin") &&
 password.getText().toString().equals("admin")) {
 Toast.makeText(getApplicationContext(), "Вход выполнен!",Toast.LENGTH_SHORT).show();

 // Выполняем переход на другой экран:
 Intent intent = new Intent(MainActivity.this,Second.class);
 startActivity(intent);
 }

 // В другом случае выдаем сообщение с ошибкой:
 else {
 Toast.makeText(getApplicationContext(), "Неправильные данные!",Toast.LENGTH_SHORT).show();
 numberOfRemainingLoginAttempts--;

 // Делаем видимыми текстовые поля, указывающие на количество оставшихся попыток:
 attempts.setVisibility(View.VISIBLE);
 numberOfAttempts.setVisibility(View.VISIBLE);
 numberOfAttempts.setText(Integer.toString(numberOfRemainingLoginAttempts));

 // Когда выполнено 3 безуспешных попытки залогиниться,
 // делаем видимым текстовое поле с надписью, что все пропало и выставляем
 // кнопке настройку невозможности нажатия setEnabled(false):
 if (numberOfRemainingLoginAttempts == 0) {
 login.setEnabled(false);
 loginLocked.setVisibility(View.VISIBLE);
 loginLocked.setBackgroundColor(Color.RED);
 loginLocked.setText("Вход заблокирован!!!");
 }
 }
 }
}

Кстати, не забудьте добавить вторую activity в файл манифеста AndroidManifest.xml:

<activity android:name=".Second">
</activity>

Проверяем работоспособность своего творения:

успешный вход и переход на второй экран что то пошло не так 

Полный провал входа через логин и пароль

Вот так, все отлично работает, теперь мы можем сделать свое приложение насколько крутым, что им смогут пользоваться только знающие данные логина и пароля для входа.

Категория: Уроки программирования | Просмотров: 1601 | Добавил: Oleg | Теги: выполнение входа, защита Android приложения, получение доступа, логин, пароль | Рейтинг: 5.0/2
Всего комментариев: 1
avatar
1 flowersilovlja • 21:51, 21.02.2016
а как сделать авторизацию через сайт?
avatar