Jimlarck
Jimlarck

Reputation: 45

String from EditText to Float error

I'm trying to convert a string to a float.

Basically, I have an edittext that's numerical only, and I'm trying to get the input of it and do some math with it before outputting the result onto another edittext.

Here is my main activity.

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    //Declare views
    EditText ptv = (EditText) findViewById(R.id.priceet);
    EditText ttv = (EditText) findViewById(R.id.taxet);
    EditText totaltv = (EditText) findViewById(R.id.totalet);

    //Declare variables
    float price =  0;
    price = Float.valueOf(ptv.getText().toString());
    float tax = 0.0F;
    tax = Float.valueOf(ttv.getText().toString()) / 100;
    float total = price*tax + price;


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:listSeparatorTextViewStyle"
    android:text="Price"
    android:id="@+id/cost"
    android:layout_alignParentEnd="true"
    android:layout_alignParentTop="true"
    android:layout_alignStart="@+id/priceet" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/priceet"
    android:layout_below="@+id/cost"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:listSeparatorTextViewStyle"
    android:text="Tax %"
    android:id="@+id/taxtv"
    android:layout_below="@+id/priceet"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/taxet"
    android:layout_below="@+id/taxtv"
    android:layout_alignParentStart="true"
    android:layout_alignEnd="@+id/totalet" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:listSeparatorTextViewStyle"
    android:text="Total"
    android:id="@+id/totaltv"
    android:layout_below="@+id/taxet"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/totalet"
    android:layout_below="@+id/totaltv"
    android:layout_alignParentStart="true"
    android:clickable="false"
    android:cursorVisible="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:layout_alignEnd="@+id/cost" />

and here is the error I'm getting

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jimlarck.taxcalculator/com.jimlarck.taxcalculator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

The error points to this line of code:

price = Float.valueOf(ptv.getText().toString());

How would I fix this? I read somewhere around here that this error is thrown when something isn't initialized properly but everything looks fine on my end. Any help is appreciated. Thank you :)

Upvotes: 1

Views: 110

Answers (1)

Mohammed Aouf Zouag
Mohammed Aouf Zouag

Reputation: 17132

You need to instantiate your EditTexts after you call super.onCreate() and setContentView():

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Declare views
    EditText ptv = (EditText) findViewById(R.id.priceet);
    EditText ttv = (EditText) findViewById(R.id.taxet);
    EditText totaltv = (EditText) findViewById(R.id.totalet);

    //Declare variables
    float price =  0;
    price = Float.valueOf(ptv.getText().toString());
    float tax = 0.0F;
    tax = Float.valueOf(ttv.getText().toString()) / 100;
    float total = price*tax + price;
}

Upvotes: 2

Related Questions