Skocz do zawartości
KRzychu8

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

    Rekomendowane odpowiedzi

    Pierwsza rzecz. Najpierw deklarujesz zmienne:

    // i to jest ok
        EditText ilo;
        EditText ko;
        TextView dystans;
        TextView wypiszDystans;
        TextView koszt;
        TextView suma;

    Potem je znowu deklarujesz i inicjujesz a następnie znowu je deklarujesz i inicjujesz.

            EditText ilo = findViewById(R.id.Ilosc1);
            EditText ko = findViewById(R.id.Koszt1);
            TextView dystans = findViewById(R.id.dystans);
            TextView wypiszDystans = findViewById(R.id.wypiszDystans);
            TextView koszt = findViewById(R.id.koszt);
            TextView licz = findViewById(R.id.textView7);
                    EditText ilo = findViewById(R.id.Ilosc1);
                    EditText ko = findViewById(R.id.Koszt1);
                    EditText pole = findViewById(R.id.Km1);
                    TextView dystans = findViewById(R.id.dystans);
                    TextView wypiszDystans = findViewById(R.id.wypiszDystans)

    Powinieneś to robić tylko raz!

    Czyli najpierw to co na samej górze a potem:

     // w metodzie OnCreate
     ilo = findViewById(R.id.Ilosc1);
     ko = findViewById(R.id.Koszt1);
     dystans = findViewById(R.id.dystans);
     wypiszDystans = findViewById(R.id.wypiszDystans);
     koszt = findViewById(R.id.koszt);
     licz = findViewById(R.id.textView7);

    Co do Twojego warunku to jest on poprawny ;) Problem jest z tą linią:

     Float km1 = Float.valueOf(pole.getText().toString());

    Zobacz że ona jest przed sprawdzeniem czy to pole jest puste. Zatem, jeżeli jest puste to rzuca błędem :) Musisz przenieść tą linię do Twojego ostatniego else, tam gdzie robisz obliczenia.

    Sumowanie również możesz tam robić. Zaraz po dodaniu elementu do listy:

    listaDanych.add(nowyWpis);
    // tutaj lecimy z sumowaniem bo wszystko mamy już na liście
    Float calyKoszt = 0.0f;
    Float calyDystans = 0.0f;
    // pętla for
    for(Dane danaZListy: listaDanych) {
        calyKoszt = calyKoszt + danaZListy.getKoszt();
        calyDystans = calyDystans + danaZListy.getKoszt();
    }
    // po pętli możesz calyKoszt i calyDystans gdzieś wyświetlić
      


     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Więc tak jako, że jestem początkujący to dopytam się bardziej, bo skleroza nie boli ;)

    Dodałem tą linijkę do else, tam gdzie robię obliczenia i dalej crashuje, gdy zostawiam tylko wolne Stan licznika...

    A z tą pętlą, domyśliłem się, że trzeba to wrzucić tam gdzie robię obliczenia, tylko żem zapomniał jak to się wywołuje... ? 

    I czy to wywołanie ma być dalej w tym else czy już poza, ale obstawiałbym, że w środku... ;) 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Napisano (edytowane)
    E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.aplikacja, PID: 19482
        java.lang.NumberFormatException: empty String
            at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
            at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
            at java.lang.Float.parseFloat(Float.java:452)
            at java.lang.Float.valueOf(Float.java:417)
            at com.example.aplikacja.Main2Activity$1.onClick(Main2Activity.java:76)
            at android.view.View.performClick(View.java:6291)
            at android.view.View$PerformClick.run(View.java:24931)
            at android.os.Handler.handleCallback(Handler.java:808)
            at android.os.Handler.dispatchMessage(Handler.java:101)
            at android.os.Looper.loop(Looper.java:166)
            at android.app.ActivityThread.main(ActivityThread.java:7425)
            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)

    Czyli znowu bym musiał napisać, że jeśli puste to coś tam, a jeśli nie to nie? ? 

    Edytowane przez KRzychu8

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Spójrz na to: 

    at com.example.aplikacja.Main2Activity$1.onClick(Main2Activity.java:76)

    W Main2Activity.java w lini 76 masz problem z zamianą Stringa na prawdopodobnie Floata bo String jest pusty:

    java.lang.NumberFormatException: empty String


    Sprawdź tą linię 76. Zamieniaj na Floata tylko wtedy gdy jesteś pewny że ten String nie jest pusty. Czyli po wszystkich sprawdzeniach.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    No dobra, niedługo do tego siądę, a takie pytanie, można w else jeszcze jednego if dać, czy niekoniecznie? Czy jak to wygląda?

    Bo zrobiłbym w else sprawdzenie czy to jest puste... Chyba, że znasz jakaś inna metodę, na chwilę obecną to przychodzi mi do głowy....

    A to wypisanie z tej pętli to normalnie, do jakiegoś Textview...?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Możesz jeszcze jedno else if dać. Przyjdzie czas na refaktoryzację jak wszystko będzie działać ;)

    9 godzin temu, KRzychu8 napisał:

    A to wypisanie z tej pętli to normalnie, do jakiegoś Textview...?

    Tak, powinno zadziałać. 

    Udostępnij tę odpowiedź


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

    Yhym, więc tak...Zrobiłem tak, że za jednym razem działało to,że pokazywało wpisz poprawne wartości... Potem coś próbowałem dodać tą pętle itp...

    I się dalej crashuje...

    Ach, co do pętli, to... Przyznaje szczerze, że nie mam pojęcia jak ją dodać...

    Dodałem pętle, potem chciałem ją wypisać, lecz mi nie wychodzi ? 

    Bo gdzie nie wstawi, to czegoś nie rozpoznaje.. :(  

    A to już na razie ostatni etap ? 

    @Coders Lab Liczę na Ciebie ;):D 

    A z tego kursu na razie przeszedłem instalowanie Android Studio ?

    Spoiler
    package com.example.aplikacja;
    
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    
    import java.util.List;
    
    
    public class Main2Activity extends AppCompatActivity {
        EditText ilo;
        EditText ko;
        TextView dystans;
        TextView wypiszDystans;
        TextView koszt;
        TextView suma;
        List <Dane> listaDanych = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            loadData();
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            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);
                    TextView dystans = findViewById(R.id.dystans);
                    TextView wypiszDystans = findViewById(R.id.wypiszDystans);
    
    
    
                    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  {
                        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);
                        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();
                }
            });
        }
    
        private void saveData() {
            SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            Gson gson = new Gson();
            String json = gson.toJson(listaDanych);
            editor.putString("task list", json);
            editor.apply();
        }
    
        private void loadData() {
            SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
            Gson gson = new Gson();
            String json = sharedPreferences.getString("task list", null);
            Type type = new TypeToken<ArrayList<Dane>>() {}.getType();
            listaDanych = gson.fromJson(json, type);
            if (json != null) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                json = gson.toJson(listaDanych);
                editor.putString("task list", json);
                editor.apply();
            }
            else {
                Intent intent = new Intent(this, Main2Activity.class);
                startActivity(intent);
            }
        }
    }
    
    
    

     

    Próbowałem za savedata(), przed, po float km1, ogólnie to w elsie... Ale nic nie daje... ? :( 

     

    Edit:: Dobra, jednak ten Android jest dziwny, bo spróbowałem jeszcze raz i ten else if teraz jakoś zadziałał 

    No to w takim razie zostałaby tylko pętla... ?

    W sensie włożenie jej do kodu, i wypisanie :D 

    Edytowane przez KRzychu8

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Pętle dodajesz zaraz za tą linią:

    listaDanych.add(nowyWpis);

    Udostępnij tę odpowiedź


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

    No dobra, to na razie działa, zostaje jeszcze tylko jak to wypisać...

    Inaczej, do którego layouta to dodać...

    Bo chcę to wstawić do tego gdzie mam to wszystko czyli te obliczenia itp...

    Dodam cały kod z Main2Activity 

    Spoiler
    package com.example.aplikacja;
    
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    
    import java.util.List;
    
    import static android.icu.text.DisplayContext.LENGTH_SHORT;
    
    
    public class Main2Activity extends AppCompatActivity {
        EditText ilo;
        EditText ko;
        TextView dystans;
        TextView wypiszDystans;
        TextView koszt;
        TextView suma;
        TextView podlicza;
        List <Dane> listaDanych = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            loadData();
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            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);
                    TextView dystans = findViewById(R.id.dystans);
                    TextView wypiszDystans = findViewById(R.id.wypiszDystans);
                    TextView podlicza = findViewById(R.id.podlicz);
    
    
    
                    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);
    
                        Float calyKoszt = 0.0f;
                        Float calyDystans = 0.0f;
    
                        for(Dane danaZListy: listaDanych) {
                            calyKoszt = calyKoszt + danaZListy.getKoszt();
                            calyDystans = calyDystans + danaZListy.getKoszt();
                        }
                        String str1 = calyKoszt.toString();
                        podlicza.setText(str1);
    
                            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();
                }
            });
        }
    
        private void saveData() {
            SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            Gson gson = new Gson();
            String json = gson.toJson(listaDanych);
            editor.putString("task list", json);
            editor.apply();
        }
    
        private void loadData() {
            SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
            Gson gson = new Gson();
            String json = sharedPreferences.getString("task list", null);
            Type type = new TypeToken<ArrayList<Dane>>() {}.getType();
            listaDanych = gson.fromJson(json, type);
            if (json != null) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                json = gson.toJson(listaDanych);
                editor.putString("task list", json);
                editor.apply();
            }
            else {
                Intent intent = new Intent(this, Main2Activity.class);
                startActivity(intent);
            }
        }
    }
    
    
    

     

    I tak samo z Activity_main.xml:

    Spoiler
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/Typ"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="27dp"
            android:layout_marginTop="39dp"
            android:text="Typ: "
            android:textSize="18sp" />
    
        <TextView
            android:id="@+id/Koszt"
            android:layout_width="wrap_content"
            android:layout_height="153dp"
            android:layout_above="@+id/Ilosc"
            android:layout_below="@+id/Typ"
            android:layout_alignStart="@+id/Typ"
            android:layout_marginStart="0dp"
            android:layout_marginTop="21dp"
            android:layout_marginBottom="-111dp"
            android:text="Koszt zł/litr: "
            android:textSize="18sp" />
    
    
        <EditText
            android:id="@+id/Koszt1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="70dp"
            android:layout_marginEnd="50dp"
            android:ems="10"
            android:inputType="numberDecimal"
            android:text="" />
    
    
        <TextView
            android:id="@+id/Ilosc"
            android:layout_width="wrap_content"
            android:layout_height="194dp"
            android:layout_above="@+id/Km"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="27dp"
            android:layout_marginTop="127dp"
            android:layout_marginBottom="-155dp"
            android:text="Ilosc: "
            android:textSize="18sp" />
    
        <EditText
            android:id="@+id/Ilosc1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_marginTop="110dp"
            android:layout_marginEnd="101dp"
            android:ems="10"
            android:inputType="numberDecimal"
            android:text="" />
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="201dp"
            android:layout_marginTop="215dp"
            android:text="Dodaj" />
    
        <TextView
            android:id="@+id/Km"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="26dp"
            android:layout_marginTop="166dp"
            android:layout_marginBottom="11dp"
            android:text="Stan licznika: "
            android:textSize="18sp" />
    
        <EditText
            android:id="@+id/Km1"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_marginStart="0dp"
            android:layout_marginTop="149dp"
            android:layout_marginEnd="47dp"
            android:inputType="numberDecimal"
            android:text="" />
    
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_vi"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/button"
            android:layout_alignParentStart="true"
            android:layout_marginStart="-5dp"
            android:layout_marginTop="-1dp" />
    
        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/button"
            android:layout_toEndOf="@+id/Typ"
            android:text="Resetuj" />
    
        <TextView
            android:id="@+id/podlicz"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="701dp"
            android:inputType="numberDecimal"
            android:text="Suma"
            android:textSize="16sp" />
    
    
    </RelativeLayout>

     

    Najbardziej to mi chodzi o tą linijkę String str1 = ... , która jest zaraz za pętlą

    No bo jeśli to powinno być inaczej, to Proszę Pomóż ? 

     

    Edit 2:

    Jakimś magicznym cudem, teraz aplikacja działa normalnie, zostaje tylko wpisanie tych dwóch wyników, aby One nie znikały...

    Próbowałem do SharedPreferences dodać, ale nie wiem jak to zrobić, aby to było ładnie i wszystko działało... ?

    Edytowane przez KRzychu8
    Pętla działa :D
    • Lubię to! 1

    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