Witajcie. Jestem początkujący, chciałbym dowiedzieć się w jaki sposób budować programy (na androida), jeśli przykładowo w tym momencie robię prosty program, który musi mieć w kodzie tablicę, która ma 4 kolumny, a wierszy 300, a żeby było fajniej, takich tablic będę miał 10. Czy mogę te 10 tablic rozłożyć na 10 plików .java
i później w prosty sposób używać tych tablic? Czyli w klasie OknoGlowneProgramu.java
będę używał tablic z plików: tablica1.java
, tablica2.java
, tablica3.java
i tak dalej. Jeśli tak mogę, to co potrzeba? Stworzę sobie te pliczki .java
i w każdym z nich dam tablicę pod public, wypełnię ją, a później będę mógł używać ich w kodzie głównym po przez przykładowo tablica1.mojaTablica[34][2];
, czy inaczej się to robi?
Przepraszam, że pytam o takie rzeczy, które dla was na pewno są banalne, ale forum z tym działem po coś istnieje, nauczę się czegoś dzięki wam, będę szczęśliwy jeśli spróbujecie mi pomóc. Przepraszam, że wam zabieram czas i od razu dziękuję za wszelką pomoc. Pozdrawiam i życzę wam podwyżki w pracy.
Jeśli musisz gdzieś w kodzie deklarować taką tablicę to na 100% robisz cos bardzo, bardzo źle. A jak potrzebujesz takich tablic 10 to już ewidentnie coś skopałeś na poziomie projektu. Zacznij może od tego co chcesz osiągnąć.
Bo bardzo często ludzie pytają tu na forum o to jak rozwiązać jakiś bardzo dziwny problem (jak twój), który wynika tylko z tego że próbują coś zrobić w bardzo zły sposób. Zamiast spytać "jak zrobić XYZ" wymyślają jakieś wydumane rozwiązanie dla XYZ które wymaga cudów na kiju a potem na forum pytają "jak zrobić cuda na kiju" ;]
Niemniej: teoretycznie gdyby te tablice były statyczne to mógłbyś się tak do nich odnosić. Ale to na pewno nie jest dobra droga.
O matko, nie rób tak.
Przede wszystkim zamiast tablic używają kolekcji np. ArrayList.
Po drugie czy na pewno potrzebujesz tablicy dwuwymiarowej, a nie możesz zrobić jednowymiarowej kolekcji jakiejś własnej klasy z czterema elementami w stylu:
public class Obiekt {
int cos;
int cos2;
...
}
List<Obiekt> lista = new ArrayList<Obiekt>;
Aha. Cieszę się, że szybko udzieliliście się tutaj. Miło z waszej strony.
Dla uproszczenia program ma wyglądać tak, że:
- będzie w nim np. okno główne programu + 4 okna dodatkowe +
DodatkoweOknoZInformacjami
. - w każdym oknie dodatkowym będzie jeden
GridView
, który będzie miał listę powiedzmy 40 samochodów - kliknięcie na danym itemie w
gridview
spowoduje odpalenie oknaDodatkoweOknoZInformacjami
jednocześnie przekazując temu oknu numer klikniętego itemu zGridView
oraz numer okna dodatkowego (np. 1). - na podstawie tych danych, te
DodatkoweOknoZInformacjami
wybierze sobie np. tablicę numer jeden i wiersz dwudziesty trzeci i wyświetli trzy informacje z 3 kolumn.
Mam nadzieję, że zrozumieliście przykład. Po prostu w klasie (pliku .java) tegoDodatkowegoOknaZInformacjami
chcę trzymać tablice lub cokolwiek innego co je zastąpi. Tam ma być po prostu zgromadzona cała wiedza o danych rzeczach. Mówicie, że tablice to fatalny pomysł i na pewno macie rację, bo wy macie doświadczenie, a ja go nie mam w ogóle, dlatego teraz proszę was byście mi ostatecznie napisali czym zastąpić te przykładowe cztery tablice (bo muszę gdzieś trzymać sporo drobnych stringów, a tablica wydawała się przejrzysta, choć zaśmiecająca miejsce w kodzie. Aha i te informacje w tych tablicach są stałe, niezmienne, z góry wypełnione w kodzie .java. Dla uproszczenia możecie sobie też wyobrazić, że macie tablicę o nazwie "Pracownicy", która ma 3 kolumny "imię", "nazwisko", "nr telefonu", a pracowników będzie 200, dane będą z góry wypełnione (w programie nie będzie opcji ich zmiany))
Ok, tak jak myśleliśmy. Dawno temu wymyślono juz coś takiego jak Klasy i Struktury, które służą do grupowania danych ze względu na ich powiazanie a nie ze względu na typ. Bo wygodniej jest zrobić klasę:
class Osoba{
private String imie;
private String nazwisko;
private String nrTelefonu;
}
A potem operować sobie na tablicy obiektów Osoba np.
Osoba[] tablica =...
Osoba zbyszek = tablica[i];
zbyszek.getImie(); //imie zbyszka!
Niż na tablicach samym imion czy nazwisk.
Dodatkowo taka klasa może przechowywać też obiekty innych klas więc możesz mieć
class Osoba{
private String imie;
private String nazwisko;
private String nrTelefonu;
private Adres adres;
}
class Adres{
private String ulica;
private String miasto;
}
Dzięki temu w kodzie możesz operować obiektami związanymi z dziedziną programu a nie jakimiś tablicami stringów czy intów.
Nie programuje w Java tylko w innym języku więc poniższy kod może zawierać drobne błędy. Jednak tak jak mówili inni powinieneś postąpić w taki sposób. Czyli utworzyć klasę Pracownik i trzymać każdego pracownika w Liście.
Osobiście uważam, że porwałeś się z motyką na słońce ponieważ osoba, która nie wie co to jest klasa nie napisze dobrej aplikacji na androida. Napotkasz dziesiątki problemów i nie będziesz w stanie ich rozwiązać. Więc jeśli możesz to radzę przejść do podstaw a potem się brać za bardziej zaawansowane rzeczy.
class Pracownik
{
public string imie;
public string nazwisko;
public string telefon;
public Pracownik(string imie, string nazwisko, string telefon)
{
this.imie = imie;
this.nazwisko = nazwisko;
this.telefon = telefon
}
}
List<Pracownik> pracownicy= new List<Pracownik>();
pracownicy.Add(new Pracownik("Ala", "Kowalska", "0700....");
@Shalom aha, dziękuję, czyli mam zrobić klasę, a następnie stworzyć tablicę takich obiektów, czyli np. 300 elementów i następnie w kodzie mam sobie wypełnić ten obiekt danymi w stylu tablica[0].imie = "Jan";
?
I to będzie czytelniejsze w kodzie niż tablice wg ciebie? Bo nie potrzebuję odwoływać się przez zbyszek.getImie();
, bo pracowników listy nie robię, te dane, którymi wypełnię wszystko to będą jakieś numery i paro zdaniowe stringi, czyli jak ta twoja klasa ma 3 elementy, to np. pierwszy element u mnie będzie miał wartość np: "FR435", a pozostałe dwa elementy to string dwu zdaniowy. Jeśli tych elementów ma być 300, to w kodzie .java
będę musiał podać np. 3*300 = 900 stringów, czyli i tak kod strony po wszystkim będzie wyglądał podobnie jak do tablicy 2d, bo scrollować w dół będę musiał i tak, bo sporo danych to jest. Ale mimo to radzisz mi od razu mieć tę klasę z trzema stringami i tyle?
(sam użytkownik programu nie będzie miał opcji wprowadzania danych i ich zmiany, jedynie będzie widział te sztywno wpisane w kod źródłowy programu dane, konkretne dane).
Ciszę się, że poświęcacie czas dla mnie i uczycie mnie nowych rzeczy. To co mi podaliście, zapisuję sobie w plikach tekstowych, by później to przećwiczyć, zobaczyć jak się tego używa, a w przyszłości w razie czego zerknąć tam by przypomnieć sobie.
@Świetny Młot
ładnie wygląda ten kod, który dałeś :)
Ja bym te dane ładował z jakiegoś pliku tekstowego albo bazy danych z nie wpisywał w kodzie. Bo co jak będziesz chciał coś na szybko dodać? Rekompilować projekt? Bez sensu.
@Shalom a te bazy danych są proste na androida? I są offline? (bez netu). Programy na androida i tak mają obrazki i wszelkie zasoby wrzucone jako cała paczka .apk
, czyli .apk
, to jeden pliczek, czyli jakbym coś miał dodawać do listy (a dodawać nie będę, bo to sztywne dane, niezmienne, które nawet za 50 lat nie będą musiały zostać zaktualizowane) cokolwiek, to i tak musiałbym program zbudować do apk i wgrać go na nowo na telefonie (update). Co innego gdyby program mógł korzystać z netu, to wtedy mógłby się łączyć z bazą mysql na serwerze jakimś, ale ja stanowczo nie chcę internetu mieszać do programu, to ma być program offline, danych może sporo jest, ale wprowadzić je muszę z góry jednorazowo, skompilować program i tyle. Teraz po przeczytaniu mojego postu co radzisz ostatecznie?
MySQL na Androida? Chryste panie.
aha, fajny ten SQLite, ale nie będę używał w tym projekcie, bo to nie program do wprowadzania danych więc szkoda mi czasu na naukę sqlite, spróbuję użyć jednego z waszych poprzednich kodów, np. to co podał pracownicy.Add(new Pracownik("Ala", "Kowalska", "0700....");
bo ładnie wygląda taka linijka