Cześć, zacząłem robić ToDoApkę. Jednakże napotkałem problem, ponieważ nie wiem jak zrobić, by każdy użytkownik po zalogowaniu się na swoje konto miał swoją listę zadań do wykonania.
Nigdy się nie bawiłem w bazy danych, dlatego to tworzenie konta i ogólnie działanie na nim jest picem na wodę.
Login i password to konta zrealizowałem za pomocą HashMapy gdzie key - to jest login, a value - to jest password. Wiem, że mógłbym mieć klase User
i później po prostu User.tasks.... Ale natrudziłem się sporo z tą HashMapą i chciałbym by tak po prostu zostało.
I teraz nie mam pojęcia, jak założmy javaloginDetails.put("lala", "papa");
oraz javaloginDetails.put("lala1", "papa1");
posiadali swoje własne czynności, które albo uprzednio zakodujemy w programie albo po prostu dodajemy w programie.
Myślałem nad ArrayList
, ale po prostu nie wiem jak to podłączyć.
Moje klasy wyglądaja tak:
MAIN:
public class Main {
public static void main(String[] args) {
ToDoEngine engine = new ToDoEngine();
engine.startToDoApp();
}
}
ToDoAppEngine:
import java.util.InputMismatchException;
import java.util.Scanner;
public class ToDoEngine {
private Scanner input = new Scanner(System.in);
private AccountMaker accountMaker = new AccountMaker();
private AccountLogger accountLogger = new AccountLogger(accountMaker);
private boolean loopIsTrue = true;
public void startToDoApp() {
System.out.println("What do you wanna to do?");
System.out.println("1. Add Account 2. Log into my account");
while (loopIsTrue) {
try {
displayMainMenu(input.nextInt());
} catch (InputMismatchException e) {
System.out.println("You've inputed something wrong!");
System.out.println("What do you wanna to do?");
System.out.println("1. Add Account 2. Log into my account");
input.next();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void displayMainMenu(int option) throws InterruptedException {
if (option >= 1 && option <= 2) {
switch (option) {
case 1:
accountMaker.inputLoginAndPassword();
accountMaker.createAccount();
System.out.println("Now let's log into you account.");
case 2:
while (loopIsTrue) {
accountLogger.inputLoginAndPassword();
if (!accountLogger.isLoginDataIncorrect()) {
loopIsTrue = false;
}
}
break;
}
}
}
}
AccountMaker:
import java.util.HashMap;
import java.util.Scanner;
public class AccountMaker {
private HashMap<String, String> loginDetails = new HashMap<>();
private String login, password;
private Scanner input = new Scanner(System.in);
void inputLoginAndPassword() {
System.out.println("Input your login");
login = input.next();
System.out.println("Input your password");
password = input.next();
}
void createAccount() throws InterruptedException {
loginDetails.put(login, password);
System.out.println("Account has been created successfully");
Thread.sleep(2000);
}
HashMap<String, String> getLoginDetails() {
return loginDetails;
}
}
AccounterLogger:
import java.util.Scanner;
public class AccountLogger {
private AccountMaker accountMaker;
private Scanner input = new Scanner(System.in);
private String login, password;
AccountLogger(AccountMaker accountMaker) {
this.accountMaker = accountMaker;
}
void inputLoginAndPassword() {
System.out.println("Input your login");
login = input.next();
System.out.println("Input your password");
password = input.next();
}
boolean isLoginDataIncorrect() {
if (accountMaker.getLoginDetails().containsKey(login) && accountMaker.getLoginDetails().get(login).equals(password)) {
System.out.println("You've logged in.");
return false;
} else
System.err.println("Bad login or password");
return true;
}
}
Dzięki za wszelkie sugestie.
///EDIT
Wpadłem na pomysł HashMapy w HashMapie, czyli HashMap<Hashmap<String,String>,ArrayList<String>>
czy jest to dobry pomysł?