Reputation: 45
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
Reputation: 17132
You need to instantiate your EditText
s 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