En artículos anteriores, hemos visto agregar y leer datos de nuestra base de datos de reinos en Android . En ese artículo, agregábamos detalles del curso en nuestra base de datos y leíamos los datos en forma de lista. En este artículo, veremos cómo actualizar estos datos en nuestra aplicación de Android.
¿Qué vamos a construir en este artículo?
Estaremos trabajando en la aplicación existente que construimos en nuestros artículos anteriores. En eso, simplemente crearemos una nueva actividad en la que crearemos un formulario para actualizar los detalles de nuestro curso. A continuación se muestra el video en el que veremos lo que vamos a construir en este artículo.
Implementación paso a paso
Paso 1 : Crear una nueva actividad para actualizar nuestro curso
Como queremos actualizar nuestro curso, para este proceso crearemos una nueva actividad donde podremos actualizar nuestros cursos en la base de datos SQLite. Para crear una nueva actividad, tenemos que navegar a la aplicación > java > el nombre del paquete de su aplicación > hacer clic con el botón derecho en el nombre del paquete > Nuevo > Actividad vacía y nombrar su actividad como UpdateCourseActivity y crear una nueva actividad. Asegúrese de seleccionar la actividad vacía .
Paso 2: agregue el repositorio de Google en el archivo build.gradle del proyecto de la aplicación.
script de compilación {
repositorios {
Google()
mavenCentral()
}
Todos los componentes de Jetpack están disponibles en el repositorio de Google Maven, inclúyelos en el archivo build.gradle
todos los proyectos {
repositorios {
Google()
mavenCentral()
}
}
Paso 3: Actualizar nuestra clase CourseRVAdapter.java
Como estaremos abriendo una nueva actividad para actualizar nuestro curso. Tenemos que agregar un detector de clics para los elementos de nuestro RecycleView . Para agregar onClickListener() a nuestros elementos de vista de reciclador, vaya a la aplicación > java > el nombre del paquete de su aplicación > clase CourseRVAdapter y simplemente agregue un onClickListener() para nuestro elemento RecyclerView. Agregue el siguiente código a su clase de adaptador.
Java
// adding on click listener for item of recycler view. holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // on below line we are creating a new intent. Intent i = new Intent(context, UpdateCourseActivity.class); // on below line we are passing all the data to new activity. i.putExtra("courseName", modal.getCourseName()); i.putExtra("courseDescription", modal.getCourseDescription()); i.putExtra("courseDuration", modal.getCourseDuration()); i.putExtra("courseTracks", modal.getCourseTracks()); i.putExtra("id", modal.getId()); // on below line we are starting a new activity. context.startActivity(i); } });
A continuación se muestra el código actualizado para el archivo CourseRVAdapter.java después de agregar el fragmento de código anterior.
Java
import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.List; public class CourseRVAdapter extends RecyclerView.Adapter<CourseRVAdapter.ViewHolder> { // variable for our array list and context private List<DataModal> dataModalArrayList; private Context context; public CourseRVAdapter(List<DataModal> dataModalArrayList, Context context) { this.dataModalArrayList = dataModalArrayList; this.context = context; } @NonNull @Override public CourseRVAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // on below line we are inflating our layout // file for our recycler view items. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.course_rv_item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull CourseRVAdapter.ViewHolder holder, int position) { DataModal modal = dataModalArrayList.get(position); holder.courseNameTV.setText(modal.getCourseName()); holder.courseDescTV.setText(modal.getCourseDescription()); holder.courseDurationTV.setText(modal.getCourseDuration()); holder.courseTracksTV.setText(modal.getCourseTracks()); // adding on click listener for item of recycler view. holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // on below line we are creating a new intent. Intent i = new Intent(context, UpdateCourseActivity.class); // on below line we are passing all the data to new activity. i.putExtra("courseName", modal.getCourseName()); i.putExtra("courseDescription", modal.getCourseDescription()); i.putExtra("courseDuration", modal.getCourseDuration()); i.putExtra("courseTracks", modal.getCourseTracks()); i.putExtra("id", modal.getId()); // on below line we are starting a new activity. context.startActivity(i); } }); } @Override public int getItemCount() { return dataModalArrayList.size(); } public class ViewHolder extends RecyclerView.ViewHolder { // creating variables for our text views. private TextView courseNameTV, courseDescTV, courseDurationTV, courseTracksTV; public ViewHolder(@NonNull View itemView) { super(itemView); // initializing our text views courseNameTV = itemView.findViewById(R.id.idTVCourseName); courseDescTV = itemView.findViewById(R.id.idTVCourseDescription); courseDurationTV = itemView.findViewById(R.id.idTVCourseDuration); courseTracksTV = itemView.findViewById(R.id.idTVCourseTracks); } } }
Paso 4: trabajar con el archivo activity_update_course.xml
Vaya a la aplicación > res > Diseño > activity_update_course.xml y agréguele el siguiente código.
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".UpdateCourseActivity"> <!--Edit text to enter course name--> <EditText android:id="@+id/idEdtCourseName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="Enter Course Name" /> <!--edit text to enter course duration--> <EditText android:id="@+id/idEdtCourseDuration" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="Enter Course Duration" /> <!--edit text to display course tracks--> <EditText android:id="@+id/idEdtCourseTracks" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="Enter Course Tracks" /> <!--edit text for course description--> <EditText android:id="@+id/idEdtCourseDescription" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="Enter Course Description" /> <!--button for updating course--> <Button android:id="@+id/idBtnUpdateCourse" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="Update Course" android:textAllCaps="false" /> </LinearLayout>
Paso 5: trabajar con el archivo UpdateCourseActivity.java
Vaya a la aplicación > java > el nombre del paquete de su aplicación > archivo UpdateCourseActivity.java y agréguele el siguiente código. Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import io.realm.Realm; public class UpdateCourseActivity extends AppCompatActivity { // creating variables for our edit text private EditText courseNameEdt, courseDurationEdt, courseDescriptionEdt, courseTracksEdt; // creating a strings for storing // our values from edittext fields. private String courseName, courseDuration, courseDescription, courseTracks; private long id; private Button updateCourseBtn; private Realm realm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_update_course); // initializing our edittext and buttons realm = Realm.getDefaultInstance(); courseNameEdt = findViewById(R.id.idEdtCourseName); courseDescriptionEdt = findViewById(R.id.idEdtCourseDescription); courseDurationEdt = findViewById(R.id.idEdtCourseDuration); courseTracksEdt = findViewById(R.id.idEdtCourseTracks); updateCourseBtn = findViewById(R.id.idBtnUpdateCourse); // on below line we are getting data which is passed from intent. courseName = getIntent().getStringExtra("courseName"); courseDuration = getIntent().getStringExtra("courseDuration"); courseDescription = getIntent().getStringExtra("courseDescription"); courseTracks = getIntent().getStringExtra("courseTracks"); id = getIntent().getLongExtra("id", 0); // on below line we are setting data in our edit test fields. courseNameEdt.setText(courseName); courseDurationEdt.setText(courseDuration); courseDescriptionEdt.setText(courseDescription); courseTracksEdt.setText(courseTracks); // adding on click listener for update button. updateCourseBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // getting data from edittext fields. String courseName = courseNameEdt.getText().toString(); String courseDescription = courseDescriptionEdt.getText().toString(); String courseDuration = courseDurationEdt.getText().toString(); String courseTracks = courseTracksEdt.getText().toString(); // validating the text fields if empty or not. if (TextUtils.isEmpty(courseName)) { courseNameEdt.setError("Please enter Course Name"); } else if (TextUtils.isEmpty(courseDescription)) { courseDescriptionEdt.setError("Please enter Course Description"); } else if (TextUtils.isEmpty(courseDuration)) { courseDurationEdt.setError("Please enter Course Duration"); } else if (TextUtils.isEmpty(courseTracks)) { courseTracksEdt.setError("Please enter Course Tracks"); } else { // on below line we are getting data from our modal where // the id of the course equals to which we passed previously. final DataModal modal = realm.where(DataModal.class).equalTo("id", id).findFirst(); updateCourse(modal, courseName, courseDescription, courseDuration, courseTracks); } // on below line we are displaying a toast message when course is updated. Toast.makeText(UpdateCourseActivity.this, "Course Updated.", Toast.LENGTH_SHORT).show(); // on below line we are opening our activity for read course activity to view updated course. Intent i = new Intent(UpdateCourseActivity.this, ReadCoursesActivity.class); startActivity(i); finish(); } }); } private void updateCourse(DataModal modal, String courseName, String courseDescription, String courseDuration, String courseTracks) { // on below line we are calling // a method to execute a transaction. realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { // on below line we are setting data to our modal class // which we get from our edit text fields. modal.setCourseDescription(courseDescription); modal.setCourseName(courseName); modal.setCourseDuration(courseDuration); modal.setCourseTracks(courseTracks); // inside on execute method we are calling a method to copy // and update to real m database from our modal class. realm.copyToRealmOrUpdate(modal); } }); } }
Ahora ejecute su aplicación y vea el resultado de la aplicación:
Producción:
A continuación se muestra la estructura completa del archivo del proyecto después de realizar la operación de actualización:
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA