Ich muss eine Konsole-Interface-Anwendung als Todo-Liste in Scala erstellen. Ich habe bereits Datenzugriffsschicht erstellt, wo ich Objekte meiner Datenbank und Abfragen über sie durch Slick 3 habe. Ich versuche auch, eine einfache Schnittstelle zu erstellen, die StdIn für das Lesen von Eingabe in Scala verwendet. Hier ist mein Code für die Schnittstelle:Stateful Benutzer in der Konsole Anwendung Scala
object Main {
val db = Database.forConfig("scalaxdb")
val userRepository = new UserRepository(db)
val taskRepository = new TaskRepository(db)
def main(args: Array[String]): Unit = {
println("Main menu:" + " \n1 - Login" + "\n2 - Exit")
println("\nChoose the operation you want to perform:")
val inputMainMenu = readInt()
buildMainMenu(inputMainMenu)
}
def buildMainMenu(inputNumber: Int) = inputNumber match {
case 1 => enterSystem()
case 2 => System.exit(0)
case _ => println("Your input was wrong. Try again"); System.exit(0)
}
def enterSystem(): Unit ={
println("Input you login, please:")
val inputLogin = readLine()
println("Input you password, please:")
val inputPassword = readLine()
val checkLogin = Await.result(DAO.checkUserLogin(inputLogin, inputPassword), Duration.Inf).toString
val userId = DAO.selectUserId(inputLogin)
def changeOutputs(checkLogin: String):Unit = checkLogin match {
case "true" => println("You have successfully entered");
displayMenu(); buildMenu(userId)
case "false" => println("Your input for login or password is
wrong"); System.exit(1)
case _ => println("Your input is wrong"); System.exit(1)
}
changeOutputs(checkLogin)
}
def displayMenu(): Unit ={
println("TODO List:" + "\n1 - Display tasks" + "\n2 - Display finished tasks" + "\n3 - Display unfinished tasks"
+ "\n4 - Add task" + "\n5 - Delete task" + "\n6 - Mark task as finished")
println("\nChoose the operation you want to perform:")
}
val inputNum = readInt()
inputNum
}
def displayUnfinishedTasks(id: Long) = {
println()
println("User's unfinished tasks:\n" + Await.result(DAO.selectUnfinishedTasks(id), Duration.Inf).toList.toString)
displayMenu()
}
Das Problem ist, dass ich in das System als Benutzer und dann ausgegeben eingeben müssen, erstellen, löschen Aufgaben des jeweiligen Benutzers. Also habe ich mich entschieden, die Benutzer-ID als Parameter an alle meine Methoden zur Manipulation zu übergeben. Also habe ich versucht, dies mit dieser Schnittstelle zu tun, aber ich bekomme einen Laufzeitfehler java.lang.NumberFormatException: For input string: "Vector(1)"
Ich weiß, dass, um diesen Fehler zu beheben, ich meine Methoden anders arrangieren kann, aber dann kann ich meine userId nicht übergeben.
Um deutlich zu machen, das ist, wie einer meiner Daten Methoden Zugriffsschicht wie folgt aussieht:
def getUserId(login: String) = {
val queryToGetUserId = (for {
user <- UserTable.table if user.login === login
} yield (user.idUser))
db.run(queryToGetUserId.result)
}
So wie kann ich die Interface-Methoden oder die gesamte Logik des Benutzerstatus in diesem Code Erhaltung ändern? Ich wäre dankbar für jede Hilfe!
UPDATE! Code geändert ein wenig (Methoden BuildMenu, DisplayMenu). Außerdem habe ich diese Gehwegmethode in meinem Dao anstelle von getUserId erstellt. So funktioniert die Schnittstelle, aber ich frage mich, wie ich meine getUserId-Methode oder die Art, wie sie aufgerufen werden sollte, um id in Methoden wie displayFinishedTasks zu übergeben, noch ändern kann. Hier ist die Methode walkaway:
def selectUserId(login: String) = login match {
case "data" => 1
case "root" => 2
}
hi @Cassie, haben Sie erwogen, scopt zu verwenden? Es ist verfügbar [hier] (https://github.com/scopt/scopt) auf GitHub. – P3trur0
@ P3trur0 Ich habe es gesehen, aber nicht herausgefunden, wie man es in meinem Projekt verwendet. Danke für den Hinweis – Cassie
1. Sie müssen wahrscheinlich den 'readInt'-Code anzeigen, da das wo die Ausnahme herkommt? Kannst du auch mehr von der Stack-Spur geben? 2.Da Sie einen Fehler bei "Vector (1)" erhalten, sieht es so aus, als würden Sie versuchen, "Vector (1)" (das ist der 'toString' eines' Vector') statt "1" 'zu analysieren (Dies ist die Zeichenfolge einer Ganzzahl). –