lunes, 16 de mayo de 2022

Implementación de métodos

Implementación de métodos

Tablas:

Registro Cliente:

package com.example.bdferreteriacamilo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Intent;
public class RegistroCliente extends AppCompatActivity
{
private EditText Cod_cli, Nom_cli, Dir_cli, Tel_cli;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registro_cliente);
Cod_cli = (EditText) findViewById(R.id.CCcli);
Nom_cli = (EditText) findViewById(R.id.NOcli);
Dir_cli = (EditText) findViewById(R.id.DIcli);
Tel_cli = (EditText) findViewById(R.id.TEcli);
}
public void RegistrarCliente(View view)
{
AdminBD admin = new AdminBD(this,"BaseDatos", null, 1);
SQLiteDatabase BaseDatosCL = admin.getWritableDatabase();
String Cedula = Cod_cli.getText().toString();
String Nombre = Nom_cli.getText().toString();
String Direccion = Dir_cli.getText().toString();
String Telefono = Tel_cli.getText().toString();
if(!Cedula.isEmpty() && !Nombre.isEmpty() && !Direccion.isEmpty() && !Telefono.isEmpty()) {
ContentValues RegistroCliente = new ContentValues();
RegistroCliente.put("cedula", Cedula);
RegistroCliente.put("nombre", Nombre);
RegistroCliente.put("direccion", Direccion);
RegistroCliente.put("telefono", Telefono);
BaseDatosCL.insert("CLIENTE", null, RegistroCliente);
BaseDatosCL.close();
Cod_cli.setText("");
Nom_cli.setText("");
Dir_cli.setText("");
Tel_cli.setText("");
Toast.makeText(this,"DATOS DEL CLIENTE INGRESADOS", Toast.LENGTH_LONG).show();
Intent intent = new Intent(RegistroCliente.this,RegistroPedido.class);
startActivity(intent);
}
else
{
Toast.makeText(this,"INGRESAR CORRECTAMENTE LOS DATOS DEL CLIENTE", Toast.LENGTH_LONG).show();
}
}
DML Select:

public void GenerarConsultaCliente(View view)
{
AdminBD admin = new AdminBD(this, "BaseDatos", null, 1);
SQLiteDatabase BDCLIENTE = admin.getWritableDatabase();
String CodigoCliente= cod_cli.getText().toString();

if (!CodigoCliente.isEmpty()) {
Cursor FilaCliente = BDCLIENTE.rawQuery("Select nombre,direccion,telefono FROM CLIENTE where cedula=" + CodigoCliente, null);

if (FilaCliente.moveToFirst()) {
nom_cli.setText(FilaCliente.getString(0));
dir_cli.setText(FilaCliente.getString(1));
tel_cli.setText(FilaCliente.getString(2));
BDCLIENTE.close();

}
else
{
Toast.makeText(this, "NO EXISTE LOS DATOS", Toast.LENGTH_LONG).show();
BDCLIENTE.close();
}
}
else
{
Toast.makeText(this, "DEBES INTRODUCIR LA CEDULA", Toast.LENGTH_LONG).show();
}
}
DML Delete:

public void EliminarDatosCliente(View view)
{
AdminBD admin = new AdminBD(this, "BaseDatos", null, 1);
SQLiteDatabase BDELIMINARCLI = admin.getWritableDatabase();
String CodigoEliminarCli = cod_cli.getText().toString();
if((!CodigoEliminarCli.isEmpty()))
{
int ELIMINARCLIENTE = BDELIMINARCLI.delete("CLIENTE", "cedula=" + CodigoEliminarCli,null);
BDELIMINARCLI.close();
nom_cli.setText("");
dir_cli.setText("");
tel_cli.setText("");

if(ELIMINARCLIENTE == 1)
{
Toast.makeText(this, "DATOS ELIMINADOS CORRECTAMENTE", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "LOS DATOS NO EXISTE", Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(this, "DEBES INTRODUCIR LA CEDULA", Toast.LENGTH_SHORT).show();
}
}
DML UPDATED

public void ActualizarDatosCliente(View view)
{
AdminBD admin = new AdminBD(this, "BaseDatos", null, 1);
SQLiteDatabase BDACTUALIZARCLI = admin.getWritableDatabase();
String CedulaCA = cod_cli.getText().toString();
String NombreCA = nom_cli.getText().toString();
String DireccionCA = dir_cli.getText().toString();
String TelefonoCA = tel_cli.getText().toString();

if (!CedulaCA.isEmpty() && !NombreCA.isEmpty() && DireccionCA.isEmpty() && TelefonoCA.isEmpty())
{
ContentValues actualizar = new ContentValues();
actualizar.put("cedula", CedulaCA);
actualizar.put("nombre", NombreCA);
actualizar.put("direccion", DireccionCA);
actualizar.put("telefono", TelefonoCA);

int ACTUALIZARCLIENTE = BDACTUALIZARCLI.update("CLIENTE", actualizar,"cedula="+ CedulaCA,null);
BDACTUALIZARCLI.close();

if(ACTUALIZARCLIENTE == 1)
{
Toast.makeText(this, "DATOS DEL CLIENTE ACTUALIZADOS", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "DATOS DEL CLIENTE NO ACTUALIZADOS", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(this, "DEBES LLENAR TODOS LOS CAMPOS DEL CLIENTE", Toast.LENGTH_SHORT).show();
}
}


Logueo y contraseña de usuario

 Logueo y contraseña de usuario

Para el Login se utilizo una condición sencilla donde se instanciaron los dos EditText y se les condiciono usando .Equals para condicionar que si las dos variables eran verdaderas entonces permitiera ingresar al otro Activity  en caso que no fuera verdadera entonces el sistema sacaba un mensajito diciendo Login incorrecto, se hizo uso del SharedPreferences para recuperar los datos almacenados de la contraseña y así no tener que teclearla nuevamente.



package com.example.base_datos_sql1;


import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private EditText etc,etn,ett;

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

etc=(EditText)findViewById(R.id.etcedula);
etn=(EditText)findViewById(R.id.etnombre);
ett=(EditText)findViewById(R.id.ettelefono);

}

//REGISTRO Y LOGUEO
public void registrar (View view){
//Abrir base de datos objeto para referir a la base de datos
AdminBD admin=new AdminBD(this,"BaseDatos",null,1);
//se abre la base de datos para escritura y lectura
SQLiteDatabase BaseDatos = admin.getWritableDatabase();
//almacena la informacion digitada por el usuario
String cedula =etc.getText().toString();
String nombre =etn.getText().toString();
String telefono =ett.getText().toString();

Creación de relaciones entre tablas

Creación de relaciones entre tablas


Modelo Entidad Relación F1:


Modelo Entidad Relación F2 (NORMALIZACIÓN):


Modelo Entidad Relación F3 
(NORMALIZACIÓN):






 

Creación de Tablas

Creación de Tablas

AdminBD admin=new AdminBD(this,"BaseDatos",null,1);
//se abre la base de datos para escritura y lectura
SQLiteDatabase BaseDatos = admin.getWritableDatabase();
//almacena la informacion digitada por el usuario
String cedula =etc.getText().toString();
String nombre =etn.getText().toString();
String telefono =ett.getText().toString();
//validacion
if (!cedula.isEmpty() && !nombre.isEmpty() && !telefono.isEmpty()){
//crear variable contentvalue para almacenar la informacion
ContentValues registro = new ContentValues();

//almacene los datos digitados
registro.put("cedula",cedula);
registro.put("nombre",nombre);
registro.put("telefono",telefono);

//insertar informacion en la tabla
BaseDatos.insert("usuario",null,registro);
//cerrar base de datos
BaseDatos.close();

//limpiar campos
ett.setText("");
etn.setText("");
etc.setText("");

Toast.makeText(this,"Registro Ingresado y Almacenado Correctamente",Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this,"Ingrese Correctamente todos los datos",Toast.LENGTH_LONG).show();
}


Creación de una base de datos

Creación de una base de datos

Diseño Interfaz:



AdminBD.java 

package com.example.conexiondeunabasededatos;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

public class AdminBD extends SQLiteOpenHelper {

public AdminBD (@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase BD)
{
BD.execSQL("create table Datos (ID int primary key, Nombre text, Telefono int) ");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{


}
}
MainActivity.java

package com.example.conexiondeunabasededatos;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private EditText EditId,EditNombre,EditTelefono;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditId = (EditText) findViewById(R.id.EditId);
EditNombre = (EditText) findViewById(R.id.EditNombre);
EditTelefono= (EditText) findViewById(R.id.EditTelefono);
}
public void Guardar(View view) {
AdminBD admin = new AdminBD(this, "BD", null, 1);
SQLiteDatabase BaseDatos = admin.getWritableDatabase();
String ID = EditId.getText().toString();
String Nombre = EditNombre.getText().toString();
String Telefono = EditTelefono.getText().toString();

if (!ID.isEmpty() && !Nombre.isEmpty() && !Telefono.isEmpty()) {
ContentValues Registro = new ContentValues();
Registro.put("ID", ID);
Registro.put("Nombre", Nombre);
Registro.put("Telefono", Telefono);
BaseDatos.insert("Datos", null, Registro);
BaseDatos.close();
EditId.setText("");
EditNombre.setText("");
EditTelefono.setText("");
Toast.makeText(this, "REGISTRO EXITOSO", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "INGRESAR CORRECTAMENTE LOS DATOS ", Toast.LENGTH_LONG).show();
}
}

public void Buscar(View view) {
AdminBD admin = new AdminBD(this, "BD", null, 1);
SQLiteDatabase BD1 = admin.getWritableDatabase();
String ID1 = EditId.getText().toString();


if (!ID1.isEmpty()) {
Cursor fila = BD1.rawQuery("Select Nombre, Telefono from Datos where ID =" + ID1, null);
if (fila.moveToFirst()) {

EditNombre.setText(fila.getString(0));
EditTelefono.setText(fila.getString(1));
BD1.close();
} else {
Toast.makeText(this, "NO EXISTE EL USUARIO", Toast.LENGTH_LONG).show();
}
}
}
}

Conexión de bases de datos en dispositivos móviles

Conexión de bases de datos en dispositivos móviles

Para la conexión de una base de datos con Java, primero se deberá dirigir a las carpetas que se ubican a mano izquierda de Android Studio, posteriormente se le dará clic derecho a la que aparece debajo de la carpeta Java como una subcarpeta.



En este caso se llama "com.example.conexiondeunabasededatos"

Luego se le da clic derecho y saldrá un menú, en la opción New y se dará clic en Java Class eso permitirá crear una clase, a la que se le asignará un nombre cualquiera.



En este caso tiene el nombre de "AdminBD"

Ahora se procede a utilizar las extensiones necesarias para  la conexión de SQLITE entre ellas:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
  • Luego se procede a crear dos métodos dentro de la clase "AdminBD" con la extensión "SQLiteOpenHelper"
  • Luego se conecta las referencias Nullable  context, name, factory y version  y se le asigna constructores de tipo super operando dentro de la clase "public  AdminBD"
  • Finalmente se procede a crear dos métodos de tipo "public Void  OnCreate"  y "onUpgrade"  asignandoles el nombre de la base de datos 
De esta manera ya esta realizada la conexión con la base de datos SQLITE

package com.example.conexiondeunabasededatos;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

public class AdminBD extends SQLiteOpenHelper {

public AdminBD (@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase BD)
{
BD.execSQL("create table Datos (ID int primary key, Nombre text, Telefono int) ");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{


}
}

Gestión de información por medio de bases de datos

Gestión de información por medio de bases de datos

Las bases de datos son una buena opción para almacenar datos los cuales los usuarios desean modificar de forma proactiva, también para almacenar contraseñas y formularios, para las aplicaciones de hoy en día estas funcionalidades solo se encuentran en bases de datos, gestionar la información de otras formas no es tan eficiente como organizarla en una base de datos confiable, y Android se conecta de forma "sencilla" a estas bases de datos y permite crear aplicaciones aprovechando estas funcionalidades.

Las principales utilidades que ofrece son las siguientes:

  • Agrupar y almacenar todos los datos de la empresa en un único lugar.
  • Evitar la redundancia y mejorar la organización de nuestra actividad.
  • Conectar los datos de operaciones, facturación e interacciones con cada cliente o potencial.
  • Activar campañas de marketing o tareas.

Si una Base de Datos se gestiona adecuadamente, la organización obtendrá diferentes ventajas. Aumentará su eficacia, habrá trabajos que se realicen con mayor rapidez y agilidad debido a la simplificación de los mismos, podremos mejorar la seguridad de los datos que almacenamos, y con todos estos factores, maximizaremos los tiempos y por tanto, se producirá una mejora en la productividad.

domingo, 15 de mayo de 2022

Ventajas de SQLite

Ventajas de SQLite


1.  La principal ventaja de SQLite es que es una base de datos embebida en la aplicación. Por lo tanto, no se necesita instalación, mantenimiento, configuración, etc.

2. Se puede acceder al contenido y actualizarlo mediante potentes consultas SQL, lo que reduce en gran medida la complejidad del código de la aplicación.

3. Los paquetes android.database y android.database.sqlite ofrecen una alternativa de mayor rendimiento donde la compatibilidad de la fuente no representa mayor problema, aprovechando los recursos.

4. Permite el acceso de múltiples aplicaciones a la misma base de datos.

5. Esta basada en archivos, lo que permite que sea fácil de utilizar y configurar.






viernes, 22 de abril de 2022

Relación entre Interfaz Gráfica y paradigma de programación orientada a objetos.

Relación entre Interfaz Gráfica y paradigma de programación orientada a objetos.

La interfaz gráfica esta compuesta de diversos elementos con los que el usuario puede interactuar, estos le transmiten información desde la aplicación hacia al usuario, e igualmente el usuario puede ingresar información hacia la aplicación de forma controlada permitiendo la debida ejecución del programa. 

Entonces, se puede interpretar que los elementos encontrados dentro de la Interfaz Gráfica de Usuario (GUI por sus siglas en inglés Graphical User Interface) son objetos con funciones específicas, estos objetos pueden ser conceptualizados como cualquier otro objeto dentro de la programación orientada a objetos, por lo tanto estos mismos objetos tendrán métodos y atributos.

Se puede analizar que el diseño de la GUI, emplea el uso de la abstracción y conceptualización de la Programación Orientada a Objetos POO, para así poder representar elementos, que pueden tomar y modificar los atributos de otros objetos del programa, así entonces, una clase Edit Text puede ser el valor a asignar para un atributos específico de un objeto de una clase, y esto se hace por medio de un método que se ejecuta por un Botón, que es a su vez un objeto de la clase Button.

Es por lo tanto que las relaciones entre GUI y POO se pueden tomar, como que la GUI es una forma gráfica de objetos de diferentes clases preconstruidas, que permiten al usuario interactuar con el flujo del programa.

Ventajas del entorno de desarrollo propuesto por Android Studio

 Ventajas encontradas de Android Studio:

1. Editor de diseño que muestra una vista previa de los cambios realizados directamente en el archivo XML:

La principal ventaja es que Android Studio permite ver en tiempo real el diseño realizado y también explorar el código generado mediante el archivo XML. Así el usuario puede editar de forma gráfica la Interfaz Gráfica de Usuario (GUI) a placer, ajustando los elementos de forma sencilla y en caso de ser necesario haciendo ajustes precisos por medio de código empleando la información que reposa dentro del archivo XML.

2. Vista previa en diferentes dispositivos y resoluciones.

El programa tiene la capacidad de poder mostrar como será el diseño previó según el tamaño y resolución de pantalla de diferentes dispositivos compatibles con Android, en caso de que no se encuentre el dispositivo deseado, es posible crear una interfaz personalizada con el tamaño de pantalla y resolución deseados; así mismo es posible configurar este perfil y guardarlo para futuros usos.

3. Permite ejecutar las compilaciones de forma muy rápida, y así poder comprobar en el momento los fallos y mejoras de la aplicación

Android Studio permite que se pueda compilar el programa ya sea empleando un emulador de un dispositivo Android, o empleando un dispositivo móvil conectado al equipo y realizando la depuración mediante USB. Esto permita que se pueda realizar correcciones del programa de forma inmediata y observar los resultados obtenidos.

Almacenamiento y recuperación de información

El código de la actividad es el siguiente:

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

Integer puntuacion1, puntuacion2;

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

SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
String puntaje1 =
String.valueOf(preferencias.getInt("puntos1", 0));
String puntaje2 =
String.valueOf(preferencias.getInt("puntos2", 0));

}

public void manejar1(View view) {
SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferencias.edit();
puntuacion1 += 1;
editor.putInt("puntos1", puntuacion1);
editor.commit();
}

public void manejar2(View view) {
SharedPreferences preferencias =
getSharedPreferences("datos", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferencias.edit();
puntuacion2 += 1;
editor.putInt("puntos2", puntuacion1);
editor.commit();
}
}

El código anterior se encarga de sumar una cantidad de puntos a las variables Puntos1 y Puntos2, dependiendo del método que se emplee, ya sea manejar1 o manejar2.

Sin lugar a duda la mayor utilidad de la clase Shared Preferences es poder almacenar valores dentro de variables a lo largo del tiempo, sin temer que estos valores vayan a perderse, la persistencia es lo que busca esta clase y donde radica su propósito.


Creación de interfaz gráfica

 El código de la actividad es el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text View - Ejemplo"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.168"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.087" />

<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Edit Text - Ejemplo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.217"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.161" />

<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="315dp"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.447"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.299">

<RadioButton
android:id="@+id/radioButton3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 1" />

<RadioButton
android:id="@+id/radioButton4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 2" />

<RadioButton
android:id="@+id/radioButton5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Radio Button - Ejemplo 3" />
</RadioGroup>

<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check Box - Ejemplo 1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.462" />

<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check Box - Ejemplo 2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.543" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.52"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.645" />

</androidx.constraintlayout.widget.ConstraintLayout

También se declara las variables de la siguiente manera:

package com.example.gui;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TextView textView;
EditText editText;
RadioButton radioButton1;
RadioButton radioButton2;
RadioButton radioButton3;
CheckBox checkBox1;
CheckBox checkBox2;
Button button;

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

textView = (TextView) findViewById(R.id.textView);
editText = (EditText) findViewById(R.id.editText);
radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
radioButton2 = (RadioButton) findViewById(R.id.radioButton2);
radioButton3 = (RadioButton) findViewById(R.id.radioButton3);
checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
button = (Button) findViewById(R.id.button);

}

}

El resultado del código es el anterior:


La interfaz gráfica y sus elementos asociados son importantes puesto que facilitan la interacción del usuario con el código programado, son una mecanismo sencillo para transmitir información al usuario, así como permitirle al mismo transmitir información a la aplicación de una manera controlada y con ciertas restricciones que permitan el adecuado funcionamiento del programa.

Tipos de estructuras repetitivas de programación.

El código de la actividad es el siguiente:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

int numero;
TextView tvResultado, tvResultado2, tvResultado3;
String salida;

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

numero = 0;
salida = "";
tvResultado = (TextView) findViewById(R.id.tvResultado);
tvResultado2 = (TextView) findViewById(R.id.tvResultado2);
tvResultado3 = (TextView) findViewById(R.id.tvResultado3);

while (numero<=20) {
numero += 1;
String cadena1 = String.valueOf(numero);
salida = salida + " " + cadena1;
}
tvResultado.setText(salida);

salida = "";

for (int i = 0; i < 16; i += 2){
String cadena2 = String.valueOf(i);
salida = cadena2 + "-";
}
tvResultado2.setText(salida);

salida = "";
numero = 0;

do{
numero += 1;
String cadena1 = String.valueOf(numero);
salida = salida + " " + cadena1;
}while (numero <= 15);
tvResultado3.setText(salida);

}
}

Las estructuras repetitivas son parte fundamental de casi cualquier programa, puesto que son importantes para recorrer vectores, realizar tareas repetitivas, iterar procesos y similares. Las estructuras permiten automatizar recorridos y son un sinónimo de automatización de cualquier proceso.