Skocz do zawartości
Zeely

[?] EditText - Odniesienie do pola Text

    Rekomendowane odpowiedzi

    Zeely

    Wziąłem się za naukę JAVY z myślą o platformie Android. Jestem już po kilku lekcjach z sieci i dla sprawdzenia swoich umiejętności chciałem napisać aplikację. Problem pojawia się już na starcie, ponieważ mam dwie aktywności, na pierwszej mam EditText oraz Button i chciałbym by pojawiła się druga aktywność, jeżeli wprowadzono w EditText ciąg znaków "asd".

    Mam do tego takie cudo w Main.java:

    public void zaloguj(View view){

    if EditText = "asd" {

    startActivity(new Intent(Main.this, Main2.class));

    } else {

    }

    Pytanie jak się odnieść do EditText by wykrywało to co jest wprowadzone w polu Text.

    W pascalu wystarczyłoby po prostu:

    if EditText.Text = "asd" then

    Tutaj zaś nie mogę dojść jak to rozwiązać ;/

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    b3stia

    Poprawna metoda pobieranie tekstu z Edit text to:

    editText.getText().toString()

    a do porównywania stringów używa się metody compare:

    string1.compareTo(string2)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Zeely

    Nie do końca chyba rozumiem. Po co porównywać stringi w tym przypadku?

    Swoją drogą "if EditText.getText().toString() = "asd" {" raczej nie będzie poprawne ;/

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Coderoid

    tekst = edittext.getText().toString();

    if (tekst.equals("asd"){

    Intent start = new Intent (this, Drugaklasa.class);

    startActivity(start);}

    else

    TOAST.makeText(this, "ZŁY CIĄG ZNAKÓW", TOAST.LENGTH.SHORT).show();

    pisane z pamięci

    Stringi porównujesz żeby sprawdzić czy tekst jest poprawny do puszczenia drugiej aktywności.

    Nie zapomnij zadeklarować drugiej aktywności w Manifescie.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Jazotu
    if EditText = "asd" {

    Nie możesz napisać w ten sposób. Nie znasz składni javy - może lepiej zacznij uczyć się czystej javy - bo jestem przekonany że nigdy jej się dobrze nie nauczysz jeśli od razu usiądziesz do Andka. Swoje trzeba przeczytać i przeklepać, jednym idzie to szybciej, drugim wolniej - ale najważniejsza jest wytrwałość i systematyczność.

    if() najlepiej jeszcze {}

    EditText - to jest klasa, innym słowem tworzysz za jej pomocą obiekt typu EditText.

    Skoro się uczyłeś już coś to pewnie uczyli mniej więcej tak:

    EditText editText = (EditText) findViewById(R.id.editText); - wyciągasz editTexta z layoutu

    editText.getText(); - wyciągasz zawartość z editTexta - wydaje mi się że z automatu zwraca String ale mogę się mylić, wtedy trzeba dopisać .toString();

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Nie do końca chyba rozumiem. Po co porównywać stringi w tym przypadku?

    Swoją drogą "if EditText.getText().toString() = "asd" {" raczej nie będzie poprawne

    Masz tu do czynienia z referencjami do obiektów a nie tekstami.

    editText.getText(); - wyciągasz zawartość z editTexta - wydaje mi się że z automatu zwraca String ale mogę się mylić, wtedy trzeba dopisać .toString();

    getText() zwraca Editable i tak jak piszesz String jest zwracany przez metodę toString()

    a do porównywania stringów używa się metody compare:

    Kod:

    string1.compareTo(string2)

    w tym przypadku lepiej użyć metody equals() bo zwraca false gdy String jest nullem, compareTo rzuca wyjątek.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Zeely

    Muszę przyznać, że trochę z tym walczyłem ale się udało :)

    Dziękuje wszystkim za wskazówki i wyjaśnienia :)

    Prosiłbym jeszcze o wskazówkę który kod jest bardziej na miejscu (oba działają identycznie):

    Intent intent = new Intent(Main.this, Main2.class);
    	EditText editText = (EditText) findViewById(R.id.editText1);
    	String etxt = editText.getText().toString();
    
    	if (etxt.equals("asd")){
    		startActivity(new Intent(Main.this, Main2.class));
    	} else {
    		Toast info = Toast.makeText(Main.this, "Wprowadzono błędne hasło!", 7000);
    		info.show();
    	}

    Intent intent = new Intent(Main.this, Main2.class);
    	EditText editText = (EditText) findViewById(R.id.editText1);
    	String etxt = editText.getText().toString();
    
    	if (etxt.equals("asd")){
    		startActivity(intent);
    	} else {
    		Toast info = Toast.makeText(Main.this, "Wprowadzono błędne hasło!", 7000);
    		info.show();
    	}

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    pierwszy, jeśli w pierwszym skasuje skasujesz pierwszą linie lub przesuniesz ją do ifa.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Jazotu

    Może wyjaśnię Ci o co chodzi Dzakus'owi ;)

    Jeżeli chodzi o pierwszy kod, w pierwszej linii tworzysz zmienną intent, której nigdy nie wykorzystujesz. Dlatego najlepiej ją usuń. Natomiast mógłbyś zrobić to też tak:

    	EditText editText = (EditText) findViewById(R.id.editText1);
    	String etxt = editText.getText().toString();
    
    	if (etxt.equals("asd")){
                           Intent intent = new Intent(Main.this, Main2.class);
    		startActivity(intent);
    	} else

    Chodzi o to żeby zmienne miały odpowiedni 'zasięg' - może ten przykład nie do końca oddaje sens tej zasady. Utworzyleś zmienna która jest wykorzystana tylko wewnątrz ciała if{} dlatego nie powinieneś jej tworzyć nad if'em tylko w jego wnętrzu. Zaoszczędzamy w ten sposób trochę zasobów urządzenia, jak np. pamięć.

    Druga moja uwaga do Toast'a. Lepiej to wygląda w ten sposób:

    Toast.makeText(Main.this, "Wprowadzono błędne hasło!", 7000).show();

    Nie używasz nigdy później zmiennej "info" to poco tworzyć jej instancje? Btw. 7s to strasznie długo, ale może miałeś jakiś powod żeby tyle ustawić - istnieją z góry zdefiniowane czasy toast'a: Toast.LENGTH_SHORT / Toast.LENGTH_LONG

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Po za tym ustawianie wartości 7000 w tym miejscu nie jest poprawne. Poprawne wartości według dokumentacji to tylko Either LENGTH_SHORT or LENGTH_LONG, co odpowiada 0 i 1, co skutkuje wyświetleniem komunikatu przez 2000 ms i 3500 ms

    Wystarczy spojrzeć na linie: https://android.googlesource.com/platform/frameworks/base/+/c7d233d93f84fce9877c3eb645bbb515baf0dc0a/services/java/com/android/server/NotificationManagerService.java L583

    Z niej wynika, że tak na prawdę twoje 7000 to LENGTH_SHORT

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x