Mon objectif est de créer une méthode dans Android Studio qui vérifie s'il existe un nom d'utilisateur existant (qui est unique) dans ma base de données. Mais mon problème est que je ne sais pas pourquoi mon code mis en œuvre ne fonctionne pas et renvoie une erreur dans LogCat. L'application ne plante pas cependant.
En fait, j'ai essayé de mettre en œuvre 2 méthodes différentes. Le premier consiste à mettre tous les noms d'utilisateur existants sélectionnés de la base de données dans une arrachelist et à utiliser la méthode ArrayList.Contains (Nom d'utilisateur) pour voir si la liste contient le nom d'utilisateur similaire. P>
L'autre méthode que j'ai essayée en utilisant est de sélectionner un nom d'utilisateur dans la base de données identique à mon nom d'utilisateur entré et voyez s'ils sont les mêmes. (Peut sembler confus, mais je vais vous montrer le code). P>
MainActivity.java p> base de donnéesHelper.java p> Résultats attendus: P> Je veux qu'il vérifie si le "nom d'utilisateur" que j'ai mis existe déjà dans la base de données ou non. Si non, exécutez la déclaration "si" et passez à l'activité suivante. Si oui, exécutez l'instruction "autre". P> résultats réels: p> Cependant, il s'avère que le code continue à exécuter l'instruction "si" et passe à l'activité suivante si le nom d'utilisateur entré existe déjà dans la base de données ou non. Si le nom d'utilisateur entré existe déjà dans la base de données, cela me donne cette erreur dans le logcat. P> logcat p>
3 Réponses :
Vous avez une fausse comparaison cette cause Votre programme continue à insérer même lorsque le nom d'utilisateur existe déjà. p> Modification de si ou p> Equals () Code > Pour une comparaison correcte des chaînes. N'utilisez pas
== code> pour comparer la chaîne (et les objets en général) p>
nom d'utilisateur p> n'est pas null p >
Vous devez laisser SQL faire tout le travail pour vous:
Select count(*) from sometable where username = @username
Miket Réponse signifie qu'il n'est pas nécessaire de vérifier avec plus de SQL One SQL faire tout le monde.
Vous n'affichez pas de votre Cependant, si vous utilisez si vous utilisez le Insérer Méthode (cela utilise efficacement insertion ou ignorer ). Il renvoie la Ce qui suit est le code car il pourrait peut-être être, sur la base de ce qui peut être glané du code disponible. P> Le code dans la MainActivity.java pourrait alors être: - p> insertable (userinfo) code> strud> méthode, mais si vous utilisez (en supposant que vous utilisiez la méthode EXECSQL pour insérer), puis en utilisant
insert ou Ignorer code> au lieu de
insérer code> puis le duplicate sera ignoré.
Integer Primary Key Autooincrerement code>, cette colonne est un alias de la colonne Rowid forte> (donc la valeur de Rowid sera donc la même que la colonne ID). LI>
ul>
UserInfo userInfo = new UserInfo(tvUsername.getText().toString(), etEnterPassword.getText().toString());
long id;
if (id = mydb.insertTable(userInfo) > 0) {
Intent intent = new Intent(MainActivity.this, Lobby.class);
intent.putExtra("username", userInfo.getUsername());
intent.putExtra("userid",id); //<<<<<<<<<< you now have the id
startActivity(intent);
} else {
// some code because user was not added
}
Ceci meilleur moyen, moins pas besoin d'accès que tout cela va, moins de mémoire utilise comme étant un curseur et aussi bien moins de code.
Hey Miket, j'ai essayé votre code. La "insertion" fonctionne. Mais le problème est que si j'utilise "si (mydb.instertable (userinfo)> 0)", il renvoie la même erreur que celle mentionnée ci-dessus. Mais cela m'empêche d'aller à une autre activité.
@Samaritan L'erreur est piégée et la pile-course imprimée, mais elle n'augmente pas une exception (c'est la façon dont l'API ait été écrit).