Está en la página 1de 32

UNIVERSIDAD PRIVADA FRANZ TAMAYO

FACULTAD DE INGENIERIA

CARRERA DE INGENIERIA EN SISTEMAS

LABORATORIO 1 H4 – BASE DE DATOS


FIREBASE

INTEGRANTES: JORGE CARLOS ROJAS CALLA

MATERIA: PROGRAMACIÓN DE DISPOSITIVOS MOVILES

SEMESTRE: SEPTIMO

LA PAZ-BOLIVIA
2021
2023
INDICE

1. INTRODUCCIÓN.......................................................................................................2

2. APLICACIÓN EN FUNCIONAMIENTO....................................................................25

3. FIREBASE................................................................................................................27

4. ENLACE DE VIDEO DEL FUNCIONAMIENTO.......................................................30


2

1. INTRODUCCIÓN.

Activity_main.xml:

En este apartado nos encargamos de realizar el diseño principal de la aplicación, lo

que seria los nombres, apellidos, correo electrónico, celular, lista de usuarios y el

diseño de cómo quedaría agregado un usuario


3
4
5

Código:

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="12dp"
tools:context=".MainActivity">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtNombres"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/txt_name"
android:inputType="textPersonName"
android:textColorHint="#616161" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtApellidos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/txt_surname"
android:inputType="textPersonName"
android:textColorHint="#616161" />
</com.google.android.material.textfield.TextInputLayout>
6

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/txt_email"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/txtPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/txt_phone"
android:inputType="phone"
app:textInputLayoutFocusedRectEnabled="false" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/txtTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:text="@string/txt_titulo"
android:textSize="28sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvDatosUsuarios"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/view_list_item" />
</LinearLayout>
7

View_list_item.xml:

Acá empezamos con el diseño de cómo quedaría el apartado del usuario con el

nombre de usuario, correo electrónico y numero de celular


8
9

Código:

<?xml version="1.0" encoding="utf-8"?>


<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="8dp"
android:layout_margin="8dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="8dp"
android:background="@android:color/white">
<ImageView
android:id="@+id/ilvFoto"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/ic_user"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ilvNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="bold"
android:text="Nombre Usuario"/>
<TextView
android:id="@+id/ilvEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="bold"
android:text="Correo Electronico"/>
<TextView
android:id="@+id/ilvPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="bold"
android:text="+591 72515724"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
10

Main_menu.xml:

Acá se realizó el encabezado de la página, lo que es agregar, editar y eliminar


11

Código:

<?xml version="1.0" encoding="utf-8"?>


<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/icon_add"
android:title="Añadir"
android:icon="@drawable/ic_add"
app:showAsAction="always"/>
<item
android:id="@+id/icon_edit"
android:title="Editar"
android:icon="@drawable/ic_edit"
app:showAsAction="always"/>
<item
android:id="@+id/icon_delete"
android:title="Eliminar"
android:icon="@drawable/ic_delete"
app:showAsAction="ifRoom"/>
</menu>

Strings.xml:

Acá solo se definió lo que es cada string y se le dio el nombre respectivo


12

Código:

<resources>
<string name="app_name">H4_firebase_db</string>
<string name="txt_name">Nombre</string>
<string name="txt_surname">Apellidos</string>
<string name="txt_email">Correo Electronico</string>
<string name="txt_phone">Telefono</string>
<string name="txt_titulo">Lista de Usuarios</string>
<string name="mnu_add">Añadir</string>
<string name="mnu_edit">Editar</string>
<string name="mnu_del">Eliminar</string>
</resources>
13

MainActivity.kt:
14
15
16

Código:

package com.example.h4_firebase_db

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.firebase.FirebaseApp
import com.google.firebase.database.*
import java.util.UUID

class MainActivity : AppCompatActivity(), OnUsuarioClickListener {

var usuarioNombres: EditText? = null


var usuarioApellidos: EditText? = null
var usuarioEmail: EditText? = null
var usuarioPhone: EditText? = null
private lateinit var rvUsuarios: RecyclerView

//Firebase
var firebaseDatabase: FirebaseDatabase? = null
var databaseReference: DatabaseReference? = null
var usuarios: MutableList<Usuario> = ArrayList<Usuario>()
var UserSelected: String? = null

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

usuarioNombres = findViewById(R.id.txtNombres)

usuarioApellidos = findViewById(R.id.txtApellidos)

usuarioEmail = findViewById(R.id.txtEmail)

usuarioPhone = findViewById(R.id.txtPhone)

rvUsuarios = findViewById(R.id.rvDatosUsuarios)
rvUsuarios.layoutManager = LinearLayoutManager(this)

initFirebase()
listaUsuariosData()
}

private fun listaUsuariosData(){


databaseReference!!.child("Usuario").addValueEventListener(object:
ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
usuarios.clear()
for (data in snapshot.children){
17

var usuario = data.getValue(Usuario::class.java)


if (usuario!=null){
usuarios.add(usuario!!)
}
}
rvUsuarios!!.adapter = UserAdapter(this@MainActivity,
usuarios)
}

override fun onCancelled(error: DatabaseError) {

}
})
}

private fun initFirebase(){


FirebaseApp.initializeApp(this)
firebaseDatabase = FirebaseDatabase.getInstance()
databaseReference = firebaseDatabase!!.reference
}
//Creacion de menu
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_menu, menu)
return super.onCreateOptionsMenu(menu)
}

//Implementacion
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val nombres = usuarioNombres!!.text.toString()
val apellidos = usuarioApellidos!!.text.toString()
val email = usuarioEmail!!.text.toString()
val phone = usuarioPhone!!.text.toString()

when (item.itemId){
R.id.icon_add -> {
if (nombres.isNullOrEmpty()||apellidos.isNullOrEmpty()||
email.isNullOrEmpty()|| phone.isNullOrEmpty()){
validateData()
}else{
val usuario = Usuario()
usuario.setUid(UUID.randomUUID().toString())
usuario.setFirstName(nombres)
usuario.setSurName(apellidos)
usuario.setEmail(email)
usuario.setPhone(phone)

//grabar en firebase linea a completar

databaseReference!!.child("Usuario").child(usuario.getUid()!!).setValue(usu
ario)
Toast.makeText(this, "Usuario Añadido",
Toast.LENGTH_SHORT).show()
cleanData()
}
}
R.id.icon_edit -> {
val usuarioEdited = Usuario()
18

usuarioEdited.setUid(UserSelected!!)

usuarioEdited.setFirstName(usuarioNombres!!.text.toString())

usuarioEdited.setSurName(usuarioApellidos!!.text.toString())
usuarioEdited.setEmail(usuarioEmail!!.text.toString())
usuarioEdited.setPhone(usuarioPhone!!.text.toString())
//grabar a firebase

databaseReference!!.child("Usuario").child(usuarioEdited.getUid()!!).setVal
ue(usuarioEdited)
Toast.makeText(this, "Editar", Toast.LENGTH_SHORT).show()
}
R.id.icon_delete -> {
val usuarioBorrado = Usuario()
usuarioBorrado.setUid(UserSelected!!)

databaseReference!!.child("Usuario").child(usuarioBorrado.getUid()!!).remov
eValue()
Toast.makeText(this, "Borrar", Toast.LENGTH_SHORT).show()
}
}
return true
}
//borrar datos
private fun cleanData(){
usuarioNombres!!.setText("")
usuarioApellidos!!.setText("")
usuarioEmail!!.setText("")
usuarioPhone!!.setText("")

usuarioNombres!!.requestFocus()

//Validar datos

private fun validateData() {


val nombres = usuarioNombres!!.text.toString()
val apellidos = usuarioApellidos!!.text.toString()
val email = usuarioEmail!!.text.toString()
val phone = usuarioPhone!!.text.toString()

if(nombres.isNullOrEmpty()){
usuarioNombres!!.error = "Obligatorio"
}else if(nombres.isNullOrEmpty()){
usuarioApellidos!!.error = "Obligatorio"
} else if(nombres.isNullOrEmpty()){
usuarioEmail!!.error = "Obligatorio"
} else if(nombres.isNullOrEmpty()){
usuarioPhone!!.error = "Obligatorio"
}
}
override fun OnItemClick(usuario: Usuario) {
UserSelected = usuario.getUid()
usuarioNombres!!.setText(usuario.getFirstName())
usuarioApellidos!!.setText(usuario.getSurName())
19

usuarioEmail!!.setText(usuario.getEmail())
usuarioPhone!!.setText(usuario.getPhone())
}

UserAdapter.kt:
20

Código:

package com.example.h4_firebase_db

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class UserAdapter(private val context: Context,


private val usuarios: List<Usuario>):
RecyclerView.Adapter<UserAdapter.UserHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):


UserHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.view_list_item,
parent, false)

return UserHolder(view)
}

override fun getItemCount(): Int {


return usuarios.size
}

override fun onBindViewHolder(holder: UserHolder, position: Int) {


val usuario = usuarios[position]
holder.bind(usuario)
}

class UserHolder(itemView: View): RecyclerView.ViewHolder(itemView){


private val foto = itemView.findViewById<ImageView>(R.id.ilvFoto)
private val name = itemView.findViewById<TextView>(R.id.ilvNombre)
private val email = itemView.findViewById<TextView>(R.id.ilvEmail)
private val phone = itemView.findViewById<TextView>(R.id.ilvPhone)
fun bind(usuario: Usuario){
foto.setImageResource(R.drawable.ic_user)
name.text = usuario.toString()
email.text = usuario.getEmail()
phone.text = usuario.getPhone()

}
}

}
21

Usuario.kt:
22

Código:

package com.example.h4_firebase_db

class Usuario {
private var vid: String? = null
private var nombres: String? = null
private var apellidos: String? = null
private var email: String? = null
23

private var phone: String? = null

//constructor
fun Usuario() {}

fun getUid(): String? {


return vid
}

fun setUid(vid: String) {


this.vid = vid
}

//1
fun getFirstName(): String? {
return nombres
}

fun setFirstName(nombres: String) {


this.nombres = nombres
}

//2
fun getSurName(): String? {
return apellidos
}

fun setSurName(apellidos: String) {


this.apellidos= apellidos
}

//3
fun getEmail(): String? {
return email
}

fun setEmail(email: String) {


this.email = email
}

//4
fun getPhone(): String? {
return phone
}

fun setPhone(phone: String) {


this.phone = phone
}

override fun toString(): String {


return "$nombres" + "$apellidos"

}
24

Conexión a Firebase.json:
25

Código:

{
"project_info": {
"project_number": "934730940194",
"firebase_url": "https://h4ddbbkotlinjcrc-default-rtdb.firebaseio.com",
"project_id": "h4ddbbkotlinjcrc",
"storage_bucket": "h4ddbbkotlinjcrc.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id":
"1:934730940194:android:d43b1776bb3713d24b2f7b",
"android_client_info": {
"package_name": "com.example.h4_firebase_db"
}
},
"oauth_client": [
{
"client_id": "934730940194-
p329f44iut9mk25bc91vappta34i9a4s.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyDBJL74RmxC52KRYvEEgVqwFQXMPkvylDU"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "934730940194-
p329f44iut9mk25bc91vappta34i9a4s.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
26

2. APLICACIÓN EN FUNCIONAMIENTO.
27
28

3. FIREBASE.

Se muestra que es cargando los datos que se está mandando de la aplicación


29
30
31

4. ENLACE DE VIDEO DEL FUNCIONAMIENTO.

https://drive.google.com/drive/folders/1fkDV_xcCslR5MLSd10VOIVk0IIQWtO1t?

usp=sharing

También podría gustarte