Функция не отображает правильное решение в приложении для Android, может кто-нибудь сказать мне, что я делаю неправильно?

введите описание изображения здесь

Программа должна принять измерение длины, ширины и глубины от пользователя, а затем отобразить, сколько литров воды может вместить бак. Однако, когда я делаю что-то вроде "12,12,14" для измерений, это дает мне какое-то смехотворно большое количество вместо чего-то около 15 галлонов. Вот основная деятельность:

package com.example.aquariumconverter;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

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

    final EditText gallonText = (EditText) findViewById(R.id.editText1);

    String strlen = String.valueOf(R.id.editText2);
    String strwid = String.valueOf(R.id.editText3);
    String strdep = String.valueOf(R.id.editText4);
    double length = Double.parseDouble(strlen);
    double width = Double.parseDouble(strwid);
    double depth = Double.parseDouble(strdep);

    RectangularTank recTank = new RectangularTank(length,width,depth);
    final String strConvertedToGallons = recTank.convertToGallons(length,width,depth);

    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            gallonText.setText(strConvertedToGallons);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

А вот класс rectangulartank:

package com.example.aquariumconverter;

import android.view.View;
import android.widget.Button;


public class RectangularTank{

public RectangularTank(double length, double width, double depth) {
    super();
    init(length, width, depth);
}

 private void init(double length, double width, double depth)
 {
     convertToGallons(length, width, depth);

 }

public String convertToGallons(double length, double width, double depth)
{
    double feetLength = length / 12.0;
    double feetWidth = width / 12.0;
    double feetDepth = depth / 12.0;
    double gallonAmount = feetLength * feetWidth * feetDepth * 7.47;
    String strGallonAmount = String.valueOf(gallonAmount);
    return strGallonAmount;
}



}

Вот обновленная версия основного действия после некоторых предложений:

package com.example.aquariumconverter;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

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

    final EditText gallonText = (EditText) findViewById(R.id.editText1);
    EditText editText2Text = (EditText) findViewById(R.id.editText2);    
    EditText editText3Text = (EditText) findViewById(R.id.editText3);    
    EditText editText4Text = (EditText) findViewById(R.id.editText4);

    double length, width, depth;
    try {
        length = Double.valueOf(editText2Text.getText().toString());
        width = Double.valueOf(editText3Text.getText().toString());
        depth = Double.valueOf(editText4Text.getText().toString());
    }  catch (NumberFormatException e){
        length=0;
        width=0;
        depth=0;
    }

    RectangularTank recTank = new RectangularTank(length,width,depth);
    final String strConvertedToGallons = recTank.convertToGallons(length,width,depth);

    Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            gallonText.setText(strConvertedToGallons);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Вот 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_below="@+id/textView2"
    android:layout_marginTop="20dp"
    android:text="Width"
    android:textAppearance="?android:attr/textAppearanceSmall" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView3"
    android:layout_below="@+id/textView3"
    android:layout_marginTop="22dp"
    android:text="Depth"
    android:textAppearance="?android:attr/textAppearanceSmall" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="23dp"
    android:text="Rectangular Tank"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="54dp"
    android:layout_toLeftOf="@+id/textView1"
    android:text="Length"
    android:textAppearance="?android:attr/textAppearanceSmall" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView3"
    android:layout_alignLeft="@+id/textView1"
    android:ems="10"
    android:inputType="number" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editText3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView4"
    android:layout_alignLeft="@+id/editText2"
    android:ems="10"
    android:inputType="number" />

<EditText
    android:id="@+id/editText4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView4"
    android:layout_alignLeft="@+id/editText3"
    android:ems="10"
    android:inputType="number" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText4"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:text="Convert" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:ems="10"
    android:inputType="textMultiLine" />

</RelativeLayout>

1 ответ

Решение

Попробуй это..

String strlen = String.valueOf(R.id.editText2);

Это не правильный способ получить текст от EditText

Вам нужно инициализировать EditText тогда вам нужно получить текст из EditText этим editText2Text.getText().toString().trim()

EditText editText2Text = (EditText) findViewById(R.id.editText2);    
EditText editText3Text = (EditText) findViewById(R.id.editText3);    
EditText editText4Text = (EditText) findViewById(R.id.editText4);

String strlen = editText2Text.getText().toString().trim();
String strwid = editText3Text.getText().toString().trim();
String strdep = editText4Text.getText().toString().trim();

РЕДАКТИРОВАТЬ 1:

    try{
          length = Double.parseDouble(editText2Text.getText().toString());
          width = Double.parseDouble(editText3Text.getText().toString());
          depth = Double.parseDouble(editText4Text.getText().toString());
    }catch (NumberFormatException e){
        length=0;
        width=0;
        depth=0;
    }

РЕДАКТИРОВАТЬ 2:

Я обнаружил проблему.. Вы не получили текст от edittext при нажатии кнопки. Попытайтесь получить это в щелчке кнопки. Это будет работать..

Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
try{
              length = Double.parseDouble(editText2Text.getText().toString());
              width = Double.parseDouble(editText3Text.getText().toString());
              depth = Double.parseDouble(editText4Text.getText().toString());
        }catch (NumberFormatException e){
            length=0;
            width=0;
            depth=0;
        }

     RectangularTank recTank = new RectangularTank(length,width,depth);
    final String strConvertedToGallons = recTank.convertToGallons(length,width,depth);

            gallonText.setText(strConvertedToGallons);
        }
    });
Другие вопросы по тегам