Как подключить firebase к android studio
Перейти к содержимому

Как подключить firebase к android studio

  • автор:

#2 — Подключение базы данных Firebase и библиотек к проекту

#2 - Подключение базы данных Firebase и библиотек к проекту

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

Видеоурок

Firebase — сервис предоставляющий различные облачные решения. С 2014 года была куплена компанией Google и с тех пор претерпела многочисленных изменений.

При помощи сервиса Google Firebase вы можете с легкостью настроить интеграцию базы данных с вашим приложением, будь то iOS, Андроид, Unity проект или вовсе ваша собственная разработка.

Подключение Firebase

  1. Зайдите на официальный сайт Google Firebase для создания пустого проекта.
  2. Добавьте новое приложение и подключите его к вашему проекту.
  3. Выполните настройки интеграции по инструкции на сайте FireBase.
  4. Все готово!

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

Подключение библиотек

dependencies < implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.google.firebase:firebase-core:16.0.1' implementation 'com.google.firebase:firebase-auth:16.0.1' implementation 'com.google.firebase:firebase-database:16.0.1' implementation 'com.android.support:design:28.+' implementation 'com.rengwuxian.materialedittext:library:2.1.4' implementation 'uk.co.chrisjenx:calligraphy:2.3.0' >apply plugin: 'com.google.gms.google-services'
Посмотреть остальной код можно после подписки на проект!

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

#2 — Подключение Firebase базы данных

#2 - Подключение Firebase базы данных

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

Видеоурок

Полезные ссылки:

  1. Официальный сайт Firebase .

Для хранения различных форматов данных используются базы данных. В андроид можно использовать разные форматы баз данных, но одна из наиболее удобных это Firebase.

Firebase — система управления базами данных, что принадлежит компании Google. Интеграция этой СУБД в Андроид Студио это простоя задача, так как ОС Андроид и Андроид Студио также принадлежит компании Google. Компания Google поощряет своих разработчиков и поэтому они сделали максимально простую и удобную интеграцию между своими сервисами.

При помощи сервиса Google Firebase вы можете с легкостью настроить интеграцию базы данных с вашим приложением, будь то: iOS, Андроид, Unity проект или вовсе ваша собственная разработка.

Подключение Firebase

  1. Зайдите на официальный сайт Google Firebase для создания пустого проекта.
  2. Добавьте новое приложение и подключите его к вашему проекту.
  3. Выполните настройки интеграции по инструкции на сайте FireBase.
  4. Все готово!

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

Firebase: Аутентификация пользователей с помощью email и пароля в android приложении

Продолжаем работать с Firebase. В этом уроке будем тестировать сервис аутентификации. Идентификация пользователей необходима в большинстве приложений. Это позволяет разделять доступ, надежно хранить личные данные пользователей в облаке и обеспечить персонализированный опыт на всех устройствах пользователя. [wpanchor >

Firebase предоставляет бэкенд, простой в использовании SDK и готовые библиотеки пользовательского интерфейса для реализации аутентификации пользователей в вашем приложении. Он поддерживает аутентификацию как с помощью email и пароля, так и с помощью таких популярных поставщиков идентификации, как Google, Facebook, Twitter и GitHub.

Сервис аутентификации тесно интегрируется с другими сервисами Firebase, использует отраслевые стандарты, такие как OAuth 2.0 и OpenID Connect, так что он может быть легко интегрирован с вашим бэкэндом. Сегодня мы рассмотрим метод аутентификации пользователей с помощью адреса электронной почты и пароля. Firebase Authentication SDK предоставляет методы для создания и управления пользователями, которые используют адреса электронной почты и пароли для входа в систему.

Будем использовать пример, созданный разработчиками Firebase на GitHub. Для этого клонируйте или скачайте репозиторий и откройте проект с именем auth в Android Studio.

Чтобы интегрировать проект с Firebase, откройте меню Tools/Firebase и в окне ассистента выберите Authentication. нажмите кнопку в шаге 1, чтобы связать ваше приложение с Firebase.

2016-11-05_13-31-31

В случае успеха в консоли Firebase вы увидите новый проект с именем auth. Зайдите в него и выберите слева пункт меню Authentication. На вкладке “Способ входа” включите пункт “Адрес электронной почты/пароль”.

2016-11-05_13-33-19

В процессе регистрации пользователей в приложении информация о них будет появляться на вкладке “Пользователи”. Здесь можно управлять пользователями – например, добавить пользователя в базу приложения, а также отключить или удалить пользователя.

Вернемся к проекту в Android Studio. Если вы видите в консоли ошибки – сделайте ребилд проекта.

Нас интересует EmailPasswordActivity. Это активити связано с файлом макета экрана activity_emailpassword.xml. Давайте посмотрим его структуру. Здесь расположены логотип Firebase, информационные текстовые поля, поля ввода email и пароля, а также кнопки входа и создания аккаунта. Это весь пользовательский интерфейс.

Откроем класс EmailPasswordActivity. Он унаследован от класса BaseActivity, который в свою очередь является наследником AppCompatActivity. Это сделано только для того, чтобы инкапсулировать методы отображения и скрытия окна ProgressDialog, которое вызывается при ожидании ответа сервера, и сократить таким образом код.

import android.app.ProgressDialog; import android.support.annotation.VisibleForTesting; import android.support.v7.app.AppCompatActivity; public class BaseActivity extends AppCompatActivity < @VisibleForTesting public ProgressDialog mProgressDialog; public void showProgressDialog() < if (mProgressDialog == null) < mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage(getString(R.string.loading)); mProgressDialog.setIndeterminate(true); >mProgressDialog.show(); > public void hideProgressDialog() < if (mProgressDialog != null && mProgressDialog.isShowing()) < mProgressDialog.dismiss(); >> @Override public void onStop() < super.onStop(); hideProgressDialog(); >>

В классе EmailPasswordActivity мы наблюдаем объявление элементов пользовательского интерфейса, а также объекта класса FirebaseAuth и его слушателя AuthStateListener.

// [START declare_auth] private FirebaseAuth mAuth; // [END declare_auth] // [START declare_auth_listener] private FirebaseAuth.AuthStateListener mAuthListener; // [END declare_auth_listener]

Класс FirebaseAuth – это точка входа в Firebase Authentication SDK. А интерфейс FirebaseAuth.AuthStateListener вызывается, когда происходит изменение в состоянии аутентификации.

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

В методе onCreate находим все элементы экрана и присваиваем слушатели кнопкам. Далее инициализируем экземпляр FirebaseAuth и создаем слушатель AuthStateListener с методом onAuthStateChanged, чтобы отслеживать, когда пользователь входит или выходит.

// [START initialize_auth] mAuth = FirebaseAuth.getInstance(); // [END initialize_auth] // [START auth_state_listener] mAuthListener = new FirebaseAuth.AuthStateListener() < @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) < FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) < // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); >else < // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); >// [START_EXCLUDE] updateUI(user); // [END_EXCLUDE] > >; // [END auth_state_listener]

Согласно документации, слушатель получает уведомления в следующих ситуациях:

  1. Когда объект FirebaseAuth завершает инициализацию и пользователь уже авторизован в предыдущей сессии, или был перенаправлен из потока входа другого поставщика идентификации.
  2. Когда пользователь выполняет вход (текущий пользователь установлен)
  3. Когда пользователь выполняет выход (текущий пользователь становится null)
  4. Когда маркер доступа (access token) текущего пользователя обновляется. Это может произойти в следующих случаях:
  • если истек срок действия токена
  • пользователь повторно выполняет проверку подлинности
  • пользователь меняет свой пароль.

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

Но вернемся к коду. Получаем экземпляр класса FirebaseUser, который представляет сведения о профиле пользователя в базе данных пользователей проекта Firebase. Он также содержит вспомогательные методы для изменения или получения информации о профиле, а также для управления состоянием аутентификации пользователя.

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

private void updateUI(FirebaseUser user) < hideProgressDialog(); if (user != null) < mStatusTextView.setText(getString(R.string.emailpassword_status_fmt, user.getEmail())); mDetailTextView.setText(getString(R.string.firebase_status_fmt, user.getUid())); findViewById(R.id.email_password_buttons).setVisibility(View.GONE); findViewById(R.id.email_password_fields).setVisibility(View.GONE); findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); >else < mStatusTextView.setText(R.string.signed_out); mDetailTextView.setText(null); findViewById(R.id.email_password_buttons).setVisibility(View.VISIBLE); findViewById(R.id.email_password_fields).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); >>

В методах onStart() и onStop() присваиваем слушатель экземпляру класса FirebaseAuth и удаляем слушатель соответственно.

// [START on_start_add_listener] @Override public void onStart() < super.onStart(); mAuth.addAuthStateListener(mAuthListener); >// [END on_start_add_listener] // [START on_stop_remove_listener] @Override public void onStop() < super.onStop(); if (mAuthListener != null) < mAuth.removeAuthStateListener(mAuthListener); >> // [END on_stop_remove_listener]

В методе createAccount, который срабатывает при нажатии кнопки создания аккаунта, сперва выполняется проверка на пустоту полей ввода email и пароля, из которых метод получает строковые переменные email и password. Логика этой проверки прописана в методе validateForm.

private boolean validateForm() < boolean valid = true; String email = mEmailField.getText().toString(); if (TextUtils.isEmpty(email)) < mEmailField.setError("Required."); valid = false; >else < mEmailField.setError(null); >String password = mPasswordField.getText().toString(); if (TextUtils.isEmpty(password)) < mPasswordField.setError("Required."); valid = false; >else < mPasswordField.setError(null); >return valid; >

Далее метод createUserWithEmailAndPassword пытается создать новую учетную запись пользователя, связанную с указанным адресом электронной почты и паролем. В базе данных проекта Firebase email служит уникальным идентификатором, а также используется для отправки письма сброса пароля.

private void createAccount(String email, String password) < Log.d(TAG, "createAccount:" + email); if (!validateForm()) < return; >showProgressDialog(); // [START create_user_with_email] mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() < @Override public void onComplete(@NonNull Tasktask) < Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) < Toast.makeText(EmailPasswordActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT).show(); >// [START_EXCLUDE] hideProgressDialog(); // [END_EXCLUDE] > >); // [END create_user_with_email] >

В случае успешного создания учетной записи пользователя, будет автоматически выполнен вход этого пользователя в вашем приложении. После успешного завершения этой операции вызывается событие onAuthStateChanged(FirebaseAuth) во всех зарегистрированных слушателях FirebaseAuth.AuthStateListeners.

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

  • FirebaseAuthWeakPasswordException – пароль не является достаточно сильным
  • FirebaseAuthInvalidCredentialsException – email адрес имеет неправильный формат
  • FirebaseAuthUserCollisionException – уже существует учетная запись с таким email

Метод addOnCompleteListener добавляет слушатель, который вызывается, когда задача завершается.

В методе onComplete интерфейса OnCompleteListener можно реализовать оповещение об успешном входе и прописать логику поведения приложения.

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

О том, что такое исключения и как с ними работать, смотрите в видеоуроках, здесь и здесь.

Далее здесь метод signIn, который выполняется при нажатии кнопки входа в пользовательском интерфейсе. Тело метода похоже на уже рассмотренный метод createAccount. Метод signIn также принимает на вход email и пароль, проверяет их и затем выполняет попытку авторизации пользователя с помощью метода signInWithEmailAndPassword.

private void signIn(String email, String password) < Log.d(TAG, "signIn:" + email); if (!validateForm()) < return; >showProgressDialog(); // [START sign_in_with_email] mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() < @Override public void onComplete(@NonNull Tasktask) < Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) < Log.w(TAG, "signInWithEmail:failed", task.getException()); Toast.makeText(EmailPasswordActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT).show(); >// [START_EXCLUDE] if (!task.isSuccessful()) < mStatusTextView.setText(R.string.auth_failed); >hideProgressDialog(); // [END_EXCLUDE] > >); // [END sign_in_with_email] >

После успешного завершения этой операции также вызывается событие onAuthStateChanged(FirebaseAuth) во всех зарегистрированных слушателях FirebaseAuth.AuthStateListeners.

Исключения, которые выбрасываются в случае неудачи:

  • FirebaseAuthInvalidUserException возникает, если учетная запись пользователя с таким email не существует или отключена
  • FirebaseAuthInvalidCredentialsException возникает, если введен неправильный пароль

Следующий метод – signOut – выполняется при нажатии кнопки выхода и вызывает одноименный метод класса FirebaseAuth. Выход из аккаунта текущего пользователя и удаление его из кэша.

private void signOut()

И метод onClick обрабатывает нажатия кнопок на экране:

@Override public void onClick(View v) < int i = v.getId(); if (i == R.id.email_create_account_button) < createAccount(mEmailField.getText().toString(), mPasswordField.getText().toString()); >else if (i == R.id.email_sign_in_button) < signIn(mEmailField.getText().toString(), mPasswordField.getText().toString()); >else if (i == R.id.sign_out_button) < signOut(); >>

Остальные методы мы уже рассмотрели.

Весь код класса EmailPasswordActivity.java:

import android.os.Bundle; import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class EmailPasswordActivity extends BaseActivity implements View.OnClickListener < private static final String TAG = "EmailPassword"; private TextView mStatusTextView; private TextView mDetailTextView; private EditText mEmailField; private EditText mPasswordField; // [START declare_auth] private FirebaseAuth mAuth; // [END declare_auth] // [START declare_auth_listener] private FirebaseAuth.AuthStateListener mAuthListener; // [END declare_auth_listener] @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_emailpassword); // Views mStatusTextView = (TextView) findViewById(R.id.status); mDetailTextView = (TextView) findViewById(R.id.detail); mEmailField = (EditText) findViewById(R.id.field_email); mPasswordField = (EditText) findViewById(R.id.field_password); // Buttons findViewById(R.id.email_sign_in_button).setOnClickListener(this); findViewById(R.id.email_create_account_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); // [START initialize_auth] mAuth = FirebaseAuth.getInstance(); // [END initialize_auth] // [START auth_state_listener] mAuthListener = new FirebaseAuth.AuthStateListener() < @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) < FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) < // User is signed in Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); >else < // User is signed out Log.d(TAG, "onAuthStateChanged:signed_out"); >// [START_EXCLUDE] updateUI(user); // [END_EXCLUDE] > >; // [END auth_state_listener] > // [START on_start_add_listener] @Override public void onStart() < super.onStart(); mAuth.addAuthStateListener(mAuthListener); >// [END on_start_add_listener] // [START on_stop_remove_listener] @Override public void onStop() < super.onStop(); if (mAuthListener != null) < mAuth.removeAuthStateListener(mAuthListener); >> // [END on_stop_remove_listener] private void createAccount(String email, String password) < Log.d(TAG, "createAccount:" + email); if (!validateForm()) < return; >showProgressDialog(); // [START create_user_with_email] mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() < @Override public void onComplete(@NonNull Tasktask) < Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) < Toast.makeText(EmailPasswordActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT).show(); >// [START_EXCLUDE] hideProgressDialog(); // [END_EXCLUDE] > >); // [END create_user_with_email] > private void signIn(String email, String password) < Log.d(TAG, "signIn:" + email); if (!validateForm()) < return; >showProgressDialog(); // [START sign_in_with_email] mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener() < @Override public void onComplete(@NonNull Tasktask) < Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) < Log.w(TAG, "signInWithEmail:failed", task.getException()); Toast.makeText(EmailPasswordActivity.this, R.string.auth_failed, Toast.LENGTH_SHORT).show(); >// [START_EXCLUDE] if (!task.isSuccessful()) < mStatusTextView.setText(R.string.auth_failed); >hideProgressDialog(); // [END_EXCLUDE] > >); // [END sign_in_with_email] > private void signOut() < mAuth.signOut(); updateUI(null); >private boolean validateForm() < boolean valid = true; String email = mEmailField.getText().toString(); if (TextUtils.isEmpty(email)) < mEmailField.setError("Required."); valid = false; >else < mEmailField.setError(null); >String password = mPasswordField.getText().toString(); if (TextUtils.isEmpty(password)) < mPasswordField.setError("Required."); valid = false; >else < mPasswordField.setError(null); >return valid; > private void updateUI(FirebaseUser user) < hideProgressDialog(); if (user != null) < mStatusTextView.setText(getString(R.string.emailpassword_status_fmt, user.getEmail())); mDetailTextView.setText(getString(R.string.firebase_status_fmt, user.getUid())); findViewById(R.id.email_password_buttons).setVisibility(View.GONE); findViewById(R.id.email_password_fields).setVisibility(View.GONE); findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); >else < mStatusTextView.setText(R.string.signed_out); mDetailTextView.setText(null); findViewById(R.id.email_password_buttons).setVisibility(View.VISIBLE); findViewById(R.id.email_password_fields).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); >> @Override public void onClick(View v) < int i = v.getId(); if (i == R.id.email_create_account_button) < createAccount(mEmailField.getText().toString(), mPasswordField.getText().toString()); >else if (i == R.id.email_sign_in_button) < signIn(mEmailField.getText().toString(), mPasswordField.getText().toString()); >else if (i == R.id.sign_out_button) < signOut(); >> >

Осталось запустить приложение на устройстве и протестировать его работу. Процесс тестирования подробно смотрите в видео.

На этом все, вот ссылка на документацию. В следующих уроках мы рассмотрим аутентификацию при помощи аккаунта Google, Facebook и Twitter.

Firebase Tutorial — Firebase database. Part I.

Постановка задачи: Познакомиться с Firebase. Зарегистрировать приложение на console.firebase.google.com. Познакомиться с NoSQL базой данных Firebase.

О Firebase (обзор):

  1. https://www.youtube.com/watch?v=0mRmHqz0-W8
  2. https://www.youtube.com/watch?v=CDXUczHzZn8
  3. https://www.youtube.com/watch?v=4kcN65wICVs
  4. https://www.youtube.com/watch?v=KGsPL7o2R7E — краткий обзор

Подключение к Firebase

Подключится можно двумя способами: автоматически и вручную. Подключимся автоматически. В Android Studio выбираем Tools — Firebase. Открывается Firebase Assistant. Нам нужно Realtime Database.

Сначала Assiatant предложит подключить приложение к Firebase. Нажимаем. Следуем инструкциям (необходим аккаутн Google). Подключили. Затем добавляем Realtime Database в наше приложение. Если все ок, в Assistant мы получим надпись зеленым шрифтом: “Dependencies set up correctly”.

В консоли Firebase теперь можно увидеть наш проект:

Если что-то пошло не так, можно подключить проект вручную. Наглядный пример см. здесь

Теперь добавим простое меню, по которому мы будем добавлять записи, сохранять изменения редактируемых записей и удалять записи в базе данных. Итак, добавим три иконки (ic_new, ic_remove, ic_save), например такие:

и добавим соответствующий им файл меню в наш проект. Для этого в res добавляем папку menu и там создаем файл “menu_main.xml”:

Теперь добавим Toolbar. В файле res — values — styles.xml параметр parent у “AppTheme” меняем на parent=”Theme.AppCompat.Light.NoActionBar”

В “activity_main.xml” добавляем описание макета Toolbar:

И, наконец, регистрируем Toolbar в MainActivity:

Инициализируем созданное нами меню. Для этого переопределяем в MainActivity onCreateOptionsMenu(…):

Создадим модель данных, которые мы будем хранить в Firebase. Пусть это будет список контактов у которых есть поле name и поле email.

В MainActivity будем отображать список контактов в виде ListView. Добавим макет элемента списка. В layout создаем “listview_item.xml”:

Добавим формы для ввода в макет главного окна, в “activity_main.xml” добавляем:

При этом надо учесть, что т.к. мы используем TextInputLayout у нас должна быть в build.gradle (Module:app) подключена библотека design, например ‘com.android.support:design:26.1.0’

Добавим в “activity_main.xml” ListView в котором будет отображаться список контактов:

Добавим также ProgressBar в “activity_main.xml”, который будет показывать что данные загружаются с Firebase:

В Preview получим примерно такое:

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

Создаем модель данных:

Пишем адаптер для ListView:

И инициализируем все View, используемые нами, в MainActivity:

Наконец, перейдем к Firebase. Инициализируем Firebase и получим ссылку на базу данных. Для этого добавляем в onCreate(…) функцию initFirebase():

Теперь в onCreate(…) добавляем функцию addEventFirebaseListener() в которой создадим слушатель, который будет обнавлять записи в ListView, когда в базе данных Firebase происходят изменения:

Тут необходимо понять, что из себя представляет класс DataSnapshot. Экземпляр этого класса содержит данные из Firebase database. Т.е. всякий раз когда мы читаем данные из базы данных Firebase, мы получаем их в виде DataSnapshot. Это своеобразные “снимки” состояния базы данных, через которые мы можем получить данные из базы, но не можем как-то воздействовать на эти данные. Более подробную информацию см. в документации.

Теперь в консоли Firebase в разделе Database изменим правила, чтобы данные читались и писались из нашего приложения в базу данных Firebase без прохождения процедуры авторизации (в учебных целях). Для этого для чтения и записи выставляем “true”. Публикуем правила.

Наконец описываем что-же произойдет когда мы нажимаем на кнопки ранее созданного меню (напомним: “создать запись”, “сохранить изменения в записи”, “удалить запись”).

Переопределяем функцию onOptionsItemSelected(MenuItem item), которая ловит нажатия на кнопки меню:

Теперь нам надо написать тело функций createUser(), updateUser(selectedUser) и deleteUser(selectedUser), но для начала переопределим слушатель нажатия на элемент списка ListView, чтобы определять выбранную запись = selectedUser. Создаем глобальную переменную selectedUser и пишем тело слушателя нажатия на элемент ListView в onCreate(…):

Если все сделали правильно, длжно работать. Мы можем добавлять данные в базуданных Firebase, редактировать и удалять их. В консоли Firebase изменение данных можно наблюдать “в прямом эфире”:

В консоле Firebase:

Например, когда мы удаляем данные, в консоли они окрашиваются в красный цвет:

26 11 2017

  • Android
    • Android Quizzes 2021
    • Review Currency App task.
    • Foreground Service Android demo App — stopwatch
    • Simple Custom View demo App — circular progress bar
    • Simple RecyclerView demo App — Stopwatch
    • RS School Android 2021
    • Реактивное программирование с применением RxJava
    • Android изнутри. Часть I
    • Большие запросы к базе данных на Android
    • ProgressDialog умер, да здравствует ProgressBar!
    • Введение в Android Architecture Components
    • Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
    • Firebase Tutorial — Firebase database. Part I.
    • У меня было 10 Android собеседований за последние два года. (перевод)
    • Android Tutorial — Facebook SDK Login. Part III. Get Posts.
    • Android Tutorial — Facebook SDK Login. Part II. Share content.
    • Android Tutorial — Facebook SDK Login. Part I.
    • Оптимизация прокрутки вложенных в друг друга RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Различные типы Item View в RecyclerView
    • Тесты сделают вас счастливее (перевод).
    • Пример анимации в Android с использованием TimeAnimator.
    • Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
    • Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
    • Зачем нужны интерфейсы в ООП?
    • Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
    • Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
    • Препарирование ContentProvider
    • REST. Описание концепции. Особенности реализации API. Максимально кратко.
    • Лоадеры (loaders) в Android. Для чего нужны. Конспект.
    • Volley vs Retrofit. Описание библиотек REST API.
    • Несколько примеров на Kotlin
    • Препарирование RecyclerView
    • Лексикон прописных истин Android
    • Xamarin.Forms. Layouts — виды
    • Xamarin.Forms. Оптимизация ListView.
    • Xamarin.Forms. Ускорение отображения окна (Activity)
    • Платформозависимость на Xamarin
    • Android Quizzes 2021
    • Реактивное программирование с применением RxJava
    • Android изнутри. Часть I
    • Большие запросы к базе данных на Android
    • ProgressDialog умер, да здравствует ProgressBar!
    • Введение в Android Architecture Components
    • Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
    • Firebase Tutorial — Firebase database. Part I.
    • У меня было 10 Android собеседований за последние два года. (перевод)
    • Android Tutorial — Facebook SDK Login. Part III. Get Posts.
    • Android Tutorial — Facebook SDK Login. Part II. Share content.
    • Android Tutorial — Facebook SDK Login. Part I.
    • Оптимизация прокрутки вложенных в друг друга RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Различные типы Item View в RecyclerView
    • Тесты сделают вас счастливее (перевод).
    • Пример анимации в Android с использованием TimeAnimator.
    • Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
    • Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
    • Зачем нужны интерфейсы в ООП?
    • Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
    • Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
    • Препарирование ContentProvider
    • REST. Описание концепции. Особенности реализации API. Максимально кратко.
    • Лоадеры (loaders) в Android. Для чего нужны. Конспект.
    • Volley vs Retrofit. Описание библиотек REST API.
    • Краткий конспект реализации Garbage Collector в Java
    • Препарирование RecyclerView
    • Лексикон прописных истин Android
    • Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
    • Firebase Tutorial — Firebase database. Part I.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *