Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMANA 7
- La aplicación debe contar con una pantalla inicial que solicite el nombre de
usuario y contraseña (login) cuando se abra la aplicación nuevamente debe
mostrar el nombre de usuario sin solicitar dichos datos nuevamente.
- https://api.libreapi.cl/rut/validate?rut=1k
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Login "
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/txtUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:ems="10"
android:hint="Usuario"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:id="@+id/txtPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:ems="10"
android:hint="Pass"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtUser" />
<Button
android:id="@+id/btnGuardar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:onClick="onClick"
android:text="Guardar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtPassword" />
<Button
android:id="@+id/btnCargar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Cargar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnGuardar" />
<TextView
android:id="@+id/campUser"
android:layout_width="142dp"
android:layout_height="53dp"
android:layout_marginTop="8dp"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.059"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnCargar" />
<TextView
android:id="@+id/campPass"
android:layout_width="142dp"
android:layout_height="49dp"
android:layout_marginTop="8dp"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.059"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/campUser" />
<TextView
android:id="@+id/tvRut"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginTop="56dp"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/campPass" />
</androidx.constraintlayout.widget.ConstraintLayout>
Visualización:
Archivo build.gradle:
plugins {
id 'com.android.application'
}
android {
namespace 'com.example.milton_lopez_control7'
compileSdk 32
defaultConfig {
applicationId "com.example.milton_lopez_control7"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-
optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.android.volley:volley:1.2.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
}
Archivo AndroidManifest.xml:
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Milton_Lopez_Control7"
tools:targetApi="31">
<activity
android:name=".ConsultaPreferencias"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>
Archivo MainActivity.java:
package com.example.milton_lopez_control7;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
@SuppressLint("MissingInflatedId")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
miTextView = findViewById(R.id.tvRut);
queue = Volley.newRequestQueue(this);
obtenerDatosVolley();
cargarPreferencias();
try {
JSONObject mJsonObjects =
response.getJSONObject("data");
String rut =mJsonObjects.getString("rut");
miTextView.setText(rut);
Toast.makeText(MainActivity.this, "Rut:"+ rut,
Toast.LENGTH_SHORT).show();
ex.printStackTrace();
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
txtUsuario.setText(user);
txtPass.setText(pass);
}
SharedPreferences.Editor editor=preferences.edit();
editor.putString("user",usuario);
editor.putString("pass",pass);
txtUsuario.setText(usuario);
txtPass.setText(pass);
editor.commit();
}
}
Paso 1:
Paso 2:
Procederemos a cerrar y abrir la app y verificaremos que nuestro login quedo guardado
para volver a ingresarlo demostrándolo en la siguiente captura de pantalla:
Paso 4:
En este paso procederemos a validar nuestro propio rut contra la api expuesta en la
semana mostrando el resultado en la siguiente captura de pantalla:
Como se puede observar lo validamos nuestro rut personal con un Toast y un TextView
mostrándolo en nuestra app como se muestra en la imagen anterior.
Respuestas:
Finalizando nuestro control número 7 este proyecto será enviado en un link de drive para
una mejor visualización del código y del proyecto el cual es el siguiente:
https://drive.google.com/drive/folders/1qTw2VkdTstev0UbsyMGf5pfuc7z9zQlE?
usp=sharing
BIBLIOGRAFÍA