在回收者视图中对物品进行更改时,更新的数据未显示在Room数据库中



无法从回收者视图和房间数据库中获取更新的数据。在数据库检查器中验证数据时,更新后的数据不可见。在调试代码时。我可以看到更新的数据,但无法在数据库检查器

中查看数据ContactRespository:

package com.app.mycontacts.Data;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import androidx.room.Room;
import java.util.List;
public class ContactRepository {
private static final String DB_NAME="contact_db";
private static ContactDetailsDatabse conDatabse;
Context context;
public ContactRepository(Context context) {
this.context = context;
conDatabse= Room.databaseBuilder(context,ContactDetailsDatabse.class,DB_NAME).build();
}
//insert task to insert the data
public void InsertTask(final ContactDetails contactDetails){
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... voids) {
conDatabse.contactDetailsDaoDao().insertTask(contactDetails);
return null;
}
@Override
protected void onPostExecute(Void unused) {
super.onPostExecute(unused);
Toast.makeText(context, contactDetails.getFirstName().concat(" ").concat(contactDetails.getLastName()) + " is updated", Toast.LENGTH_SHORT).show();
}
}.execute();
}
public List<ContactDetails> getContactsDetails(){
List<ContactDetails> contactDetailsList= conDatabse.contactDetailsDaoDao().getAllContacts();
return  contactDetailsList;
}
public void UpdateTask(final ContactDetails contactDetails) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
conDatabse.contactDetailsDaoDao().updateTask(contactDetails);
return null;
}
}.execute();
}
public void DeleteTask(final ContactDetails contactDetails) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
conDatabse.contactDetailsDaoDao().updateTask(contactDetails);
return null;
}
}.execute();
}
}

......................

UpdatedActivity.java

package com.app.mycontacts.Activities;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.app.mycontacts.Data.ContactDetails;
import com.app.mycontacts.Data.ContactRepository;
import com.app.mycontacts.Data.MyAdapterClass;
import com.app.mycontacts.R;
public class UpdateActivity extends AppCompatActivity {
EditText firstName, lastName, phoneNumber, emailId;
Button updateButton;
ImageView closeButton;
String cfirstNAme="", clastName="", cphoneNumber="", cemailId="";
String firstNameToUpdate="", lastNameToUpdate="", numberToUpdate="", emailToUpdate="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
firstName= findViewById(R.id.firstNameUp);
lastName= findViewById(R.id.lastNameUp);
phoneNumber= findViewById(R.id.numberUpAddContact);
emailId= findViewById(R.id.email_up);
updateButton= findViewById(R.id.update_button);
closeButton= findViewById(R.id.close_img_up);
// get values from custom adapter
Bundle data= getIntent().getExtras();
if(data!=null){
cfirstNAme=data.getString("fname");
clastName=data.getString("lname");
cphoneNumber= data.getString("number");
}
///set values to UI
firstName.setText(cfirstNAme+"");
phoneNumber.setText(cphoneNumber+"");
lastName.setText(clastName+"");
///update values
updateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (firstName.getText().toString().isEmpty() || lastName.getText().toString().isEmpty()
|| phoneNumber.getText().toString().isEmpty())
{
Toast.makeText(UpdateActivity.this, "Fill Details", Toast.LENGTH_SHORT).show();
}
else
{
firstNameToUpdate = firstName.getText().toString().trim();
lastNameToUpdate = lastName.getText().toString().trim();
numberToUpdate = phoneNumber.getText().toString().trim();
ContactRepository contactRepository = new ContactRepository(getApplicationContext());
ContactDetails condetails = new ContactDetails(firstNameToUpdate,lastNameToUpdate,numberToUpdate,emailToUpdate);
contactRepository.UpdateTask(condetails);
// Toast.makeText(UpdateActivity.this, "Values Updated", Toast.LENGTH_SHORT).show();
finish();
}
}
});
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(UpdateActivity.this, MainActivity.class);
startActivity(in);
}
});
}
}

已尝试调试代码。并在数据库检查器中验证详细信息。

尝试添加不添加adapter.notifyDataSetChanged();

public void UpdateTask(final ContactDetails contactDetails) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
conDatabse.contactDetailsDaoDao().updateTask(contactDetails);
adapter.notifyDataSetChanged();
return null;
}
}.execute();
}

最新更新