Skocz do zawartości
KRzychu8

W jaki sposób podliczyć wartości oraz zresetować je w danym dniu?

    Rekomendowane odpowiedzi

    W sumie to bardzo bym chciał, żeby wszystko działało... :( 

    Ale chodziło mi o to, że wiem jak to wygląda ? 

    Próbowałem zrobić ten warunek z .isEmpty(), albo z null i ja jak to ja... Mając szczęście w życiu...

    Nic nie pomaga :( 

    A nawet nazwy TextView pozmieniałem ? 

    Pętla wygląda tak, że jak wcisnę przycisk to się podlicza i dalej znika wszystko, w sensie te wyniki...

    Spoiler
    loadData();
    
            if (listaDanych != null) {
                Float calyKoszt = 0.0f;
                Float calyDystans = 0.0f;
    
                for(Dane danaZListy: listaDanych) {
                    calyKoszt = calyKoszt + danaZListy.getKoszt();
                    calyDystans = calyDystans + danaZListy.getDystans();
                }
    
                String str1 = calyKoszt.toString();
                String str2 = calyDystans.toString();
    
                if (str1.isEmpty() || str2.isEmpty() ) {
                    petla();
                }
            }

     

    Czegoś się nauczyłem i skróciłem trochę ? 

    Spoiler
        private void petla() {
            TextView pokazujekoszt = findViewById(R.id.wynikkoszt);
            TextView pokazujedystans = findViewById(R.id.wynikdystans);
            Float calyKoszt = 0.0f;
            Float calyDystans = 0.0f;
    
            for(Dane danaZListy: listaDanych) {
                calyKoszt = calyKoszt + danaZListy.getKoszt();
                calyDystans = calyDystans + danaZListy.getDystans();
            }
            String str1 = calyKoszt.toString();
            pokazujekoszt.setText(str1);
    
            String str2 = calyDystans.toString();
            pokazujedystans.setText(str2);
        }

     

    Bez warunku, wcale nie odpala, z warunkiem pewnie źle... :( 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Ta pętla powinna wyglądać dokładnie tak samo w obsłudze kliknięcia na przycisk. Skoro po kliknięciu działa to powinna i tutaj bez żadnych dodatkowych warunków.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)

    Więc jeśli dam tą samą pętle co mam po kliknięciu :

    Spoiler
    loadData();
    
            TextView pokazujekoszt = findViewById(R.id.wynikkoszt);
            TextView pokazujedystans = findViewById(R.id.wynikdystans);
            Float calyKoszt = 0.0f;
            Float calyDystans = 0.0f;
    
            for(Dane danaZListy: listaDanych) {
                calyKoszt = calyKoszt + danaZListy.getKoszt();
                calyDystans = calyDystans + danaZListy.getDystans();
            }
            String str1 = calyKoszt.toString();
            pokazujekoszt.setText(str1);
    
            String str2 = calyDystans.toString();
            pokazujedystans.setText(str2);

     

    Pokazuje mi: 

    Spoiler
    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.aplikacja, PID: 23544
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aplikacja/com.example.aplikacja.Main2Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3303)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411)
            at android.app.ActivityThread.-wrap12(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1994)
            at android.os.Handler.dispatchMessage(Handler.java:108)
            at android.os.Looper.loop(Looper.java:166)
            at android.app.ActivityThread.main(ActivityThread.java:7529)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
            at com.example.aplikacja.Main2Activity.onCreate(Main2Activity.java:49)
            at android.app.Activity.performCreate(Activity.java:7383)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)

     

    Natomiast jeśli dodam to moje sprawdzenie Stringa, to Activity się nie włącza, bo dla mnie jest ten else, kod wygląda: 

    Spoiler
     loadData();
    
            TextView pokazujekoszt = findViewById(R.id.wynikkoszt);
            TextView pokazujedystans = findViewById(R.id.wynikdystans);
            Float calyKoszt = 0.0f;
            Float calyDystans = 0.0f;
    
            for(Dane danaZListy: listaDanych) {
                calyKoszt = calyKoszt + danaZListy.getKoszt();
                calyDystans = calyDystans + danaZListy.getDystans();
            }
            String str1 = calyKoszt.toString();
            String str2 = calyDystans.toString();
    
            if (str1.isEmpty() && str2.isEmpty()){
                pokazujekoszt.setText(str1);
                pokazujedystans.setText(str2);
            }
            else {
                pokazujekoszt.setText(str1);
                pokazujedystans.setText(str2);
            }

     

    To mam :

    Spoiler
    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.aplikacja, PID: 24241
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aplikacja/com.example.aplikacja.Main2Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3303)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411)
            at android.app.ActivityThread.-wrap12(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1994)
            at android.os.Handler.dispatchMessage(Handler.java:108)
            at android.os.Looper.loop(Looper.java:166)
            at android.app.ActivityThread.main(ActivityThread.java:7529)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
            at com.example.aplikacja.Main2Activity.onCreate(Main2Activity.java:56)
            at android.app.Activity.performCreate(Activity.java:7383)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)

     

     

    A tutaj nie crashuje tylko się włącza ;) 

    Spoiler
    loadData();
    
            TextView pokazujekoszt = findViewById(R.id.wynikkoszt);
            TextView pokazujedystans = findViewById(R.id.wynikdystans);
            Float calyKoszt = 0.0f;
            Float calyDystans = 0.0f;
    
            for(Dane danaZListy: listaDanych) {
                calyKoszt = calyKoszt + danaZListy.getKoszt();
                calyDystans = calyDystans + danaZListy.getDystans();
            }
            String str1 = calyKoszt.toString();
            String str2 = calyDystans.toString();
    
            if (str1.isEmpty() || str2.isEmpty()){
                pokazujekoszt.setText(str1);
                pokazujedystans.setText(str2);
            }

     

    Nie ma tego else ,i nie pokazuje żadnego błędu... ? Tylko jak pisałem, nie podlicza tego co mam, jak wrócę z powrotem do tego Activity, to podsumowanie znika ?  

    Edytowane przez KRzychu8

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @KRzychu8 mógłbyś mi tutaj dodać cały swój projekt jako załącznik? Bo błąd możesz mieć w jakimś dziwnym miejscu. Odpalę Twój projekt u siebie i zobaczę co jest nie tak ?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Wiem co było nie tak :D 

    W metodzie onCreate(Bundle savedInstanceState)  zawsze jako pierwsze dwie linie musi być:
     

            super.onCreate(savedInstanceState); // jeżeli jakiś stan instniał wcześniej zostaje przywrócony
            setContentView(R.layout.activity_main2); // TUTAJ najważniejsze - przypięcie layoutu do activity, bez tego żadne pola nie są widoczne i rzuca wyjątkami

    czyli Twoja metoda będzie wyglądała tak:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            loadData();
    
            TextView pokazujekoszt = findViewById(R.id.wynikkoszt);
            TextView pokazujedystans = findViewById(R.id.wynikdystans);
            Float calyKoszt = 0.0f;
            Float calyDystans = 0.0f;
    
            for(Dane danaZListy: listaDanych) {
                calyKoszt = calyKoszt + danaZListy.getKoszt();
                calyDystans = calyDystans + danaZListy.getDystans();
            }
            String str1 = calyKoszt.toString();
            String str2 = calyDystans.toString();
    
    //tutaj warunek już niepotrzebny 
                pokazujekoszt.setText(str1);
                pokazujedystans.setText(str2);
            
    
            final RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler_vi);
    
            recycler.setLayoutManager(new LinearLayoutManager(this));
    
            final MainAdapter adapter = new MainAdapter(listaDanych);
            recycler.setAdapter(adapter);
    
            TextView koszt = findViewById(R.id.koszt);
            Button button = (Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    EditText ilo = findViewById(R.id.Ilosc1);
                    EditText ko = findViewById(R.id.Koszt1);
                    EditText pole = findViewById(R.id.Km1);
    
    
                    if ( ko.getText().toString().isEmpty() || ilo.getText().toString().isEmpty()) {
                        Toast toast = Toast.makeText(getApplicationContext(), "Wprowadź poprawne dane", Toast.LENGTH_SHORT);
                        toast.show();
                    }
                    else if (pole.getText().toString().isEmpty()) {
                        Toast toast = Toast.makeText(getApplicationContext(), "Wprowadź poprawne dane", Toast.LENGTH_SHORT);
                        toast.show();
                    }
                    else if (pole.equals("")) {
                        Toast toast = Toast.makeText(getApplicationContext(), "Wprowadź ", Toast.LENGTH_SHORT);
                        toast.show();
                    }
    
                    else {
                        Float km1 = Float.valueOf(pole.getText().toString());
                        Float num1 = Float.valueOf(ilo.getText().toString());
                        Float num2 = Float.valueOf(ko.getText().toString());
                        Float sum = num1 * num2;
    
                        Dane nowyWpis = new Dane(sum, km1);
                        listaDanych.add(nowyWpis);
    
                        petla();
    
                        adapter.notifyDataSetChanged();
                        saveData();
                    }
                }
    
            });
    
            Button button_reset = findViewById(R.id.button5);
            button_reset.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listaDanych.clear();
                    saveData();
                }
            });
        }

     

    • Piwko! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)

    Och, dziękuje @Coders Lab

    Jeśli to zadziała, to należy Ci się piwko... Oczywiście, nie wirtualne ?

     

    Edit:

    I myślę, że już moje ostatnie pytanie, co do tego tematu... 

    Chciałbym jeszcze, aby zaokrąglało ten koszt i dystans do dwóch miejsc po przecinku... W sensie to co się wyświetla w RecyclerView...

    Jakoś próbowałem, ale z doświadczenia ? podejrzewam, że trzeba to najpierw zamienić na String, potem .format("%.2f"), tylko myślę gdzie to wstawić... 

    Edytowane przez KRzychu8
    Myślę, że już ostatnie pytanie ;)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    22 godziny temu, KRzychu8 napisał:

    Chciałbym jeszcze, aby zaokrąglało ten koszt i dystans do dwóch miejsc po przecinku... W sensie to co się wyświetla w RecyclerView...

    W klasie MainAdapter w metodzie onBindViewHolder:

        @Override
        public void onBindViewHolder( MainViewHolder holder, int position) {
            Dane daneDoWypisania = data.get(position);
    
            holder.wypiszKoszt.setText(String.format(Locale.getDefault(), "%.2f", daneDoWypisania.koszt)); //Locale.getDefault() - dodałem dlatego że Android Studio podświetlało jako potencjalny błąd gdy był sam String.format("%.2f", daneDoWypisania.koszt)
            holder.wypiszDystans.setText(String.format(Locale.getDefault(), "%.2f", daneDoWypisania.dystans));
    
        }

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Dziękuje, wszystko działa ładnie pięknie 

    Natomiast aplikacja na chwilę obecną:

     

    Screenshot_20190222-161632.jpg

    • Lubię to! 1

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)
    W dniu 31.12.2018 o 00:58, KRzychu8 napisał:

    Witam, piszę po raz pierwszy w tym dziale i myślę, że uzyskam odpowiedź na mój problem...

    Iż gdyż po  Onlinesbi sudoku aadhar card wciśnięciu przycisku chciałbym, aby zostały dodane kolejne Koszty i Dystans jaki został przejechany (Mam na myśli poniżej)

    Moglibyście także podpowiedzieć, jak zrobić, aby to podliczało na koniec miesiąca i resetowało i tak co miesiąc.

    Heh, w Androidzie jak coś "programuje" od 4 dni... Więc i tak uważam, że to i tak wysoki poziom jak na mnie...

    Z góry dziękuje za odpowiedź i podpowiedź ;)

    Pozdrawiam

    Wesołego Sylwestra ;) 

     

    Dlatego na początek SharedPreferences może być dobrym rozwiązaniem, szczególnie że OP dopiero zaczyna zabawę z programowaniem na Androida. Potem spokojnie będzie mógł rozbudować swoją aplikację i dodać bazę danych.

    Edytowane przez hanifanze

    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