2010-09-22 4 views
1

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"); 
} 

}

Répondre

2

Cela devrait le faire:

String.valueOf(editTextName.getText()) 
+0

Merci ami. J'ai pensé plus tard à la fonction toString(), mais votre réponse est meilleure (en cas de nulls etc). – OceanBlue

+0

toString() est la façon standard de le faire que j'ai vu – Falmarri

Questions connexes