Permalänk
Medlem

Lagra och visa info i Java

Hejsan!

Jag sitter och försöker skriva ett program, mest på kul (Alltså ingen skoluppgift).

Jag låter användaren göra några val genom switch-konstruktioner och bla kan användaren få se viss info (namn, personnr, ålder mm) om en person.
Användaren kan även lägga till nya personer till listan (som för närvarande är en array-list, till jag blir bättre på mappar och kan göra allt via hashmaps eller dylikt).

Jag tänkte sedan att användaren skulle få möjlighet att se/lägga till mer info om personen, tex "Personens favoritfärg är grön och hen är morgontrött" (eller vad som helst). Och det är här det tar helt stopp i mina tankebanor. Visst skulle man kunna ha all info om personen i samma klass, men om man tex vill ha personuppgifterna i en klass och extrainformationen i en annan klass, hur i hela friden gör man enklast då? (Problemet uppstår ju då det faktiskt är flera personer med extrainformation, och jag vill ju ha rätt information till rätt person).

Är det bara databas som gäller, eller finns det enklare varianter? Programmet är litet och jag vill egentligen bara få det att funka hyggligt nu, för att sedan lära mig mer utifrån det.

Tack för att du tog dig tid

Permalänk
Medlem

Har du tänkt igenom varför du vill lagra informationen om samma Person i en annan klass?

Hur som helst, några sätt att göra det på, (som kan vara dåliga, inte optimala och göra det jobbigare längre fram)
1. Skapa en Tuple klass som har en Person och en PersonInfo Tuple(Person,PersonInfo) och spara dessa i en lista

ArrayList<Tuple> list = new ArrayList<>(); list.add(new Tuple(new Person("Swe", "Clockers", "4301230000"), new PersonInfo("Latmask","Tacos","Sven Ingvars"))); for(Tuple t: list){ Person p1 = t.getPerson(); PersonInfo p2 = t.getPersonInfo(); if(p1.getPersonNr() == "6410120000"){ // do something }

Denna lösning introducerar mer komplikationer när du sedan vill komma åt och redigera ett enskilt objekt, men kan vara okej om du bara vill skriva ut alla personer du har sparat i en lista exempelvis.

2. Stoppa in de två objecten i en Map

Permalänk
Medlem
Skrivet av NoToes:

Har du tänkt igenom varför du vill lagra informationen om samma Person i en annan klass?

Hur som helst, några sätt att göra det på, (som kan vara dåliga, inte optimala och göra det jobbigare längre fram)
1. Skapa en Tuple klass som har en Person och en PersonInfo Tuple(Person,PersonInfo) och spara dessa i en lista

ArrayList<Tuple> list = new ArrayList<>(); list.add(new Tuple(new Person("Swe", "Clockers", "4301230000"), new PersonInfo("Latmask","Tacos","Sven Ingvars"))); for(Tuple t: list){ Person p1 = t.getPerson(); PersonInfo p2 = t.getPersonInfo(); if(p1.getPersonNr() == "6410120000"){ // do something }

Denna lösning introducerar mer komplikationer när du sedan vill komma åt och redigera ett enskilt objekt, men kan vara okej om du bara vill skriva ut alla personer du har sparat i en lista exempelvis.

2. Stoppa in de två objecten i en Map

Tackar

Nja, jag vill ju egentligen kunna skriva ut olika infon i olika lägen, beroende på vad användaren väljer.

1) Visa lista på personer
- Visar namn och pnr på personerna i listan

2) Sök och visa info om en specifik person
- Visar namn, pnr, adress och ålder

3) Sök och visa all info om en specifik person
- Visar allt

4) Redigera information om en specifik person
- Redigerar info-delen

Detta är bara exempel, men jag gör det för att lära mig, så det är inte så noga just vilken info det gäller, mer om HUR jag bäst lagrar, ändrar och visar den.

Tack igen för din hjälp. Väldigt intressant och jag har vips ännu mer att läsa på om, haha.

Permalänk
Medlem
Skrivet av JJ72:

Tackar

Nja, jag vill ju egentligen kunna skriva ut olika infon i olika lägen, beroende på vad användaren väljer.

1) Visa lista på personer
- Visar namn och pnr på personerna i listan

2) Sök och visa info om en specifik person
- Visar namn, pnr, adress och ålder

3) Sök och visa all info om en specifik person
- Visar allt

4) Redigera information om en specifik person
- Redigerar info-delen

Detta är bara exempel, men jag gör det för att lära mig, så det är inte så noga just vilken info det gäller, mer om HUR jag bäst lagrar, ändrar och visar den.

Tack igen för din hjälp. Väldigt intressant och jag har vips ännu mer att läsa på om, haha.

Just vad du vill visa när du väl har fått tag på rätt element är i sig inget svårt, det svåra när du väljer att dela upp det är ju just att matcha rätt objekt och komma åt dessa på en godkänd tid. Om du vill kan du kika lite på Parse.com, dom kanske endast har till Android och inte vanlig Java, osäker.

Hur som helst, det är i princip en databas där du kan lagra antingen lokalt på enheten eller i deras cloud och sedan göra lite olika roliga saker med den datan. Hur som helst:

@Override public void onTextChanged(CharSequence s, int start, int before, int count) { /*Perform query with input*/ String queryInput = queryText.getText().toString(); ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Line"); query.whereContains("Number",queryInput); query.orderByAscending("Number"); query.findInBackground(new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> posts, ParseException e) { List<PlaceHolderLine> copy = new ArrayList<>(); data = new PlaceHolderLine[posts.size()]; if (e == null) { Log.d("Found",posts.size() + "elements"); for (int i = 0; i< posts.size(); i++) { String n =(String) posts.get(i).get("Number"); String d = (String)posts.get(i).get("Direction"); String bg = (String)posts.get(i).get("Bg"); String txt = (String)posts.get(i).get("TextColor"); Log.d("Number & Direction: ",n + " " + d ); data[i] = new PlaceHolderLine(n,d,txt,bg); } /*Data should now contain all PlaceHolderLine elements*/ adapter = new LineDisplayAdapter(getContext(),R.layout.line_list_item,data); queryText.setAdapter(adapter); adapter.notifyDataSetChanged(); }

Så här ser ett exempel ut, där det är ett textfält där användaren kan mata in siffror. När användaren skriver i textfältet så hämtar den samtidigt matchande objekt från min Parse.com tabell i bakgrunden och visar dessa i en lista.
Du får ursäkta lite kassa variabel och metodnamn, då ingen annan ska se koden Ta inte efter!

Min klass i Parse har då variablerna "Number" , "Direction", "Bg", "TextColor" och jag använder "Number" att söka efter då den identifierar objektet. I detta fall har ett nummer två riktningar (sluthållplatser).

Har för mig att du även kan länka olika objekt i Parse, men hur som helst, om du mest är inne på att lära dig Java behöver du inte dyka in i Parse och Android, bara ett förslag

Permalänk
Medlem

@NoToes:
Jag tackar så väldans för det

Det blir till att plugga på maps och databaser (o mycket mer, haha) märker jag...