Reputation: 129
I am creating an application which takes numerical vales from the edittext, does calculation on them like calculation of discount, change of currency etc and then display them on another edittext.
I am converting values from string to Double and then again displaying it in the screen by converting double to string. I have marked the line where calculation and displaying of values takes place.
My problem is that, nothing is displayed on the edittext and no error is generated in the logcat.
public class Calculator extends Activity implements View.OnClickListener {
EditText carat,list,price,total,discount,converter,discamt,caratrs;
Button submit;
Button one, two, three, four, five, six, seven, eight, nine, zero, clear,dot,calc;
double int_list=0,int_carat=0,int_discount=0,int_converter=0,int_price=0,int_total=0,int_discamt=0,int_pricers=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
carat=(EditText)findViewById(R.id.carat);
list=(EditText)findViewById(R.id.list);
price=(EditText)findViewById(R.id.price);
total=(EditText)findViewById(R.id.total);
discount=(EditText)findViewById(R.id.discount);
converter=(EditText)findViewById(R.id.converter);
discamt=(EditText)findViewById(R.id.discamt);
caratrs=(EditText)findViewById(R.id.caratrs);
submit=(Button)findViewById(R.id.submit);
calc=(Button)findViewById(R.id.calculate);
one = (Button) findViewById(R.id.one);
two = (Button) findViewById(R.id.two);
three = (Button) findViewById(R.id.three);
four = (Button) findViewById(R.id.four);
five = (Button) findViewById(R.id.five);
six = (Button) findViewById(R.id.six);
seven = (Button) findViewById(R.id.seven);
eight = (Button) findViewById(R.id.eight);
nine = (Button) findViewById(R.id.nine);
zero = (Button) findViewById(R.id.zero);
clear=(Button)findViewById(R.id.clear);
dot=(Button)findViewById(R.id.dot);
price.setInputType(InputType.TYPE_NULL);
total.setInputType(InputType.TYPE_NULL);
carat.setInputType(InputType.TYPE_NULL);
list.setInputType(InputType.TYPE_NULL);
converter.setInputType(InputType.TYPE_NULL);
discount.setInputType(InputType.TYPE_NULL);
discamt.setInputType(InputType.TYPE_NULL);
caratrs.setInputType(InputType.TYPE_NULL);
try{
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
four.setOnClickListener(this);
five.setOnClickListener(this);
six.setOnClickListener(this);
seven.setOnClickListener(this);
eight.setOnClickListener(this);
nine.setOnClickListener(this);
zero.setOnClickListener(this);
dot.setOnClickListener(this);
}
catch(Exception e){
}
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(carat.isFocused())
{
carat.setText("");
}
else if(price.isFocused())
{
price.setText("");
}
else if(total.isFocused())
{
total.setText("");
}
else if(list.isFocused())
{
list.setText("");
}
else if(discount.isFocused())
{
discount.setText("");
}
else if(converter.isFocused())
{
converter.setText("");
}
else if(discamt.isFocused())
{
discamt.setText("");
}
else if(caratrs.isFocused())
{
caratrs.setText("");
}
}
});
---------------------------This is where all the calculation takes place including displaying the value on the edittext-----------------------------
calc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int_list = Double.parseDouble(list.getText().toString());
int_carat = Double.parseDouble(carat.getText().toString());
int_discount = Double.parseDouble(discount.getText().toString());
int_converter = Double.parseDouble(converter.getText().toString());
int_discamt = Double.parseDouble(discamt.getText().toString());
int_discamt = (int_list * int_discount) / 100;
int_price = int_list - int_discamt;
int_pricers = int_price * int_converter;
int_total = int_price * int_converter * int_carat;
price.setText(Double.toString(int_price));
discamt.setText(Double.toString(int_discamt));
caratrs.setText(Double.toString(int_pricers));
total.setText(Double.toString(int_total));
}
catch(NumberFormatException e)
{
e.printStackTrace();
}
}
});
}
@Override
public void onClick(View v) {
if(carat.isFocused())
{
carat.setText(carat.getText().toString() + ((Button) v).getText());
}
else if(list.isFocused())
{
list.setText(list.getText().toString() +((Button)v).getText());
}
else if(discount.isFocused())
{
discount.setText(discount.getText().toString() +((Button)v).getText());
}
else if(converter.isFocused())
{
converter.setText(converter.getText().toString() +((Button)v).getText());
}
}
}
This is what i am getting in logcat
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ java.lang.NumberFormatException: Invalid double: ""
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at java.lang.StringToReal.invalidReal(StringToReal.java:63)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at java.lang.StringToReal.parseDouble(StringToReal.java:248)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at java.lang.Double.parseDouble(Double.java:295)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at com.diamond.traders.Calculator$2.onClick(Calculator.java:176)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.view.View.performClick(View.java:4438)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.view.View$PerformClick.run(View.java:18422)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5017)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-07 18:00:14.918 14299-14299/com.diamond.traders W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
Upvotes: 1
Views: 12428
Reputation: 1888
Double.toString()
is not recommended by lint, because it doesn't take into account locale settings. Consider using String.format(locale, "%f", 123D);
You can replace locale
with Locale.US, for example.
Upvotes: 3
Reputation: 22972
java.lang.NumberFormatException: Invalid double: ""
......
m.err﹕ at java.lang.Double.parseDouble(Double.java:295)
It simply states that one of your String
which you are trying to parse as double
is ""
.
int_list = Double.parseDouble(list.getText().toString());
int_carat = Double.parseDouble(carat.getText().toString());
int_discount = Double.parseDouble(discount.getText().toString());
int_converter = Double.parseDouble(converter.getText().toString());
int_discamt = Double.parseDouble(discamt.getText().toString());
Make sure your EditText
have value.
And you can use String.valueOf(total)
to convert to String
.
NOTE:
Make sure your EditText
is not Empty use ed.getText().toString().equals("")
(some other validation may be needed this is just an example) to validate and surround code with try catch when there is possibility of Exception.
It may be possible you have placed id at wrong EditText
which remains empty during calculation so please check.
Upvotes: 1
Reputation: 33248
You have to put validation for all EditText field.
calc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String list = list.getText().toString().trim();
String carat = carat.getText().toString().trim();
String discount = discount.getText().toString().trim();
String converter = converter.getText().toString().trim();
String discamt = discamt.getText().toString().trim();
if(list.length() > 0 && carat.length() > 0 && discount.length() > 0
&& converter.length() > 0 && discamt.length() > 0 )
{
try {
int_list = Double.parseDouble(list.getText().toString());
int_carat = Double.parseDouble(carat.getText().toString());
int_discount = Double.parseDouble(discount.getText().toString());
int_converter = Double.parseDouble(converter.getText().toString());
int_discamt = Double.parseDouble(discamt.getText().toString());
int_discamt = (int_list * int_discount) / 100;
int_price = int_list - int_discamt;
int_pricers = int_price * int_converter;
int_total = int_price * int_converter * int_carat;
price.setText(Double.toString(int_price));
discamt.setText(Double.toString(int_discamt));
caratrs.setText(Double.toString(int_pricers));
total.setText(Double.toString(int_total));
}
catch(NumberFormatException e)
{
e.printStackTrace();
}
}else
{
Toast.makeText(context, "Please enter all value.", Toast.LENGTH_SHORT).show();
}
}
});
Upvotes: 1
Reputation: 818
It seems like you are trying to parse an empty String as a double. You should check with:
if (edittext.getText().length > 0)
Upvotes: 0
Reputation: 1444
Use
double doubleValue;
edittext.setText(""+doubleValue);
OR
edittext.setText(String.valueOf(doubleValue));
Upvotes: 1