Avatar
Tomhaus
Člen
Avatar
Tomhaus:

Ahojky, dělam aplikaci pro android podle javaFX předlohy kde mi program fungoval (samozřejmě, že jsem dostatečně vše upravil pro funkci na androidu).
A narazil jsem na neočekávané ukončení aplikace.
Android mi samozřejmě neřekne chybu a proto žádám vás, aby jste mi pomohli.
Grafika běží jak po másle, ale po zmáčknutí tlačítka se aplikace ukončí.
Nevim jak sem ma postnout celej projekt, a proto vám sem dám jen hlavní kódy.

Grafika - activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="visible"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Spinner
        android:id="@+id/Spinner1"
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_alignBottom="@+id/editText1"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/editText1" />

    <EditText
        android:id="@+id/EditText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/Spinner2"
        android:layout_marginTop="10dp"
        android:ems="10" />

    <Spinner
        android:id="@+id/Spinner2"
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_alignLeft="@+id/EditText2"
        android:layout_below="@+id/editText1"
        android:layout_marginLeft="78dp"
        android:layout_marginTop="10dp" />

    <Spinner
        android:id="@+id/Spinner3"
        android:layout_width="60dp"
        android:layout_height="40dp"
        android:layout_alignLeft="@+id/Spinner1"
        android:layout_alignTop="@+id/EditText2" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/EditText2"
        android:layout_below="@+id/Spinner3"
        android:layout_marginTop="10dp"
        android:layout_marginRight="55dp"
        android:text="Vypočítej" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/EditText2"
        android:layout_alignRight="@+id/EditText2"
        android:layout_below="@+id/button1"
        android:layout_marginTop="10dp"
        android:gravity="center" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignRight="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="2dp"
        android:gravity="center" />

</RelativeLayout>

hlavní aktivita - MainActivity.java:

package main.aons;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends Activity{

        private String arraySpin0103[], arraySpinOper[];

        private Button btn1;
        private EditText etxt01, etxt02;
        private Spinner spin01, spin02, spin03;
        private TextView txtv01, txtv02;
        private int ctext01, ctext02;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                setSpinners();
                addCLickListener();
        }

        public void errorMessage(int error){
                String errorString = "";
                if(error == 0){
                        errorString = "";
                        txtv02.setText(errorString);
                }
                /*
                if(error == 1){
                        errorString = "Prázdné hodnoty!";
                        lab02.setText(errorString);
                }
                */
                if(error == 2){
                        errorString = "První hodnota je nízká!";
                        txtv01.setText("");
                        txtv02.setText(errorString);
                }

                if(error == 3){
                        errorString = "Dělíte 0!";
                        txtv01.setText("");
                        txtv02.setText(errorString);
                }
        }

        public void addCLickListener(){
                btn1 = (Button) findViewById(R.id.button1);
                btn1.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                calcul();
                        }
                });
        }

        public void setSpinners(){
                spin01 = (Spinner) findViewById(R.id.Spinner1);
                spin02 = (Spinner) findViewById(R.id.Spinner2);
                spin03 = (Spinner) findViewById(R.id.Spinner3);
                arraySpin0103 = new String[4];
                arraySpin0103[0] = "2";
                arraySpin0103[1] = "8";
                arraySpin0103[2] = "10";
                arraySpin0103[3] = "16";
                ArrayAdapter<String> adapter0103 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arraySpin0103);
                int spinnerPosition0103 = adapter0103.getPosition("10");
                spin01.setAdapter(adapter0103);
                spin01.setSelection(spinnerPosition0103);
                spin03.setAdapter(adapter0103);
                spin03.setSelection(spinnerPosition0103);

                arraySpinOper = new String[4];
                arraySpinOper[0] = "+";
                arraySpinOper[1] = "-";
                arraySpinOper[2] = "*";
                arraySpinOper[3] = "/";
                ArrayAdapter<String> adapterOper = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arraySpinOper);
                spin02.setAdapter(adapterOper);
        }

        public void calcul(){
                int model01 = Integer.parseInt((String) spin01.getSelectedItem());
                int model03 = Integer.parseInt((String) spin03.getSelectedItem());
                String text01 = etxt01.getText().toString();
                String text02 = etxt02.getText().toString();
                String operation = spin03.getSelectedItem().toString();

                txtv01.setText("");

                if(text01.equals("")){
                        etxt01.setText("0");
                        text01 = "0";
                }
                if(text02.equals("")){
                        etxt02.setText("0");
                        text02 = "0";
                }

                convert10(text01, model01, 1);
                convert10(text02, model03, 1);
                calculate(operation, model01);
        }

        public void convert10(String value, int model, int order){
                if(order == 1){
                        ctext01 = Integer.parseInt(value, model);
                }
                if(order == 2){
                        ctext02 = Integer.parseInt(value, model);
                }
        }

        public void calculate(String operation, int model){
                int res10;
                switch(operation){
                        case "+":
                                res10 = ctext01 + ctext02;
                                convertBack(res10, model, 0);
                                break;

                        case "-":
                                if(ctext01 >= ctext02){
                                        res10 = ctext01 - ctext02;
                                        convertBack(res10, model, 0);
                                }else{
                                        errorMessage(2);
                                }
                                break;

                        case "*":
                                res10 = ctext01 * ctext02;
                                convertBack(res10, model, 0);
                                break;

                        case "/":
                                if(ctext02 != 0 && ctext01 >= ctext02){
                                        res10 = ctext01 / ctext02;
                                        convertBack(res10, model, 1);
                                }else if(ctext02 == 0){
                                        errorMessage(3);
                                }else if(ctext01 < ctext02){
                                        errorMessage(2);
                                }
                                break;
                }
        }

        public void convertBack(int res10, int model, int operation){
                String res;
                res = Integer.toString(res10, model);
                errorMessage(0);
                if(operation == 1){
                        if(res10 * ctext02 == ctext01){ //upozornění na zaokrouhlování
                                txtv01.setText(res);
                        }else{
                                txtv01.setText(res);
                                txtv02.setText("Pozor číslo je zaokrohlené!");
                        }
                }else{
                        txtv01.setText(res);
                }
        }
}

Tak snad je to vše, co potřebujete.
Budu rád za každou odpověď.

Odpovědět 26.2.2015 19:12
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
BLADE
Člen
Avatar
BLADE:

Andoid ti rovnako ako aj v FX môže napísať chybu. Keď zapneš aplikáciu pozri si logcat čo je vlastne klasická konzola tkaže uvidíš chybu. Prípadne si jednotlivé časti programu zakomentuj, nech vidíš pri čom ti to vypína.

 
Nahoru Odpovědět 26.2.2015 21:02
Avatar
zitekv
Člen
Avatar
zitekv:

Chybí tam definovat (najít) při práci s EditTextem a TextView tyto položky pomocí

etxt01=(EditText) findViewById(R.id.editText1);
 
Nahoru Odpovědět  +1 26.2.2015 22:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.