J'ai un champ de texte dans la base de données SQLite, que je souhaite que l'utilisateur puisse mettre à jour. J'ai donc extrait et affiché le texte dans une vue EditText. L'utilisateur l'édite et appuie sur le bouton "Mettre à jour". À ce stade, je veux mettre à jour le champ de texte dans la base de données avec n'importe quel utilisateur dans le EditText.Mise à jour de la base de données à partir d'un EditText
Voici le problème, EditText renvoie le type modifiable.
Et la put (clé de chaîne, valeur de chaîne) fonction de ContentValues, que j'utilise lors de la mise à jour de l'enregistrement, attend un chaîne. Alors, comment mettre un Editable dans une chaîne?
J'ai essayé upcasting le Editable à CharSequence, puis en castant à String, mais cela me donne une exception d'exécution, ClassCastException, ce qu'il devrait très bien (parce que l'objet était un Editable pour commencer, je ne peux pas en faire un String).
Alors, comment contourner ce problème? Voici le code que j'utilise. Je sais que c'est faux, mais je n'arrive pas à comprendre comment faire cela.
@Override
public void onClick(View v) {
// update logic
CharSequence strNewName = editTextName.getText();
//Update record in the table
ContentValues newRecord = new ContentValues();
newRecord.put(GIDatabase.Students.NAME, (String strNewName); //ClassCastException here
int rowsEffected = db.update(GIDatabase.Students.STUDENTS_TABLE_NAME, newRecord, GIDatabase.Students._ID + "=?", new String[]{strId});
if (rowsEffected != 1) {
// This should never be reached
throw new RuntimeException("Error updating name");
}
}
Merci ami. J'ai pensé plus tard à la fonction toString(), mais votre réponse est meilleure (en cas de nulls etc). – OceanBlue
toString() est la façon standard de le faire que j'ai vu – Falmarri