2013-02-17 1 views
1

Моя сила приложения закрывается, когда я пытался назначить значение текстового значения для float. вот код. Я также попытался использовать метод Float.parseFloat() вместо Float.valueOf(). Если я сниму метод getETvalue(), приложение будет работать. Пожалуйста, помогитеПринудительное закрытие при попытке получить значение EditText в переменной float

package com.example.aviator_18; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    float Remaining,Departure,TotUplift,SG,DiscResult; 
    int CalUpliftResult; 
    TextView RemainingTV,DepartureTV,UpliftTV,SGtv,CalcUpliftTV,DiscrepancyTV; 
    EditText RemainingET,DepartureET,TotUpliftET,SGet,CalcUpliftET,DiscrepancyET; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setupView(); 
     getETvalue(); 
     evaluation(); 
     CalcUpliftTV.setText(String.valueOf(CalUpliftResult)); 
     DiscrepancyTV.setText(String.valueOf(DiscResult)); 


    } 

    private void getETvalue() { 
     String a,b,c,d,e; 
     Remaining=Float.valueOf(RemainingET.getText().toString()); 
     Departure=Float.valueOf(DepartureET.getText().toString()); 
     TotUplift=Float.valueOf(TotUpliftET.getText().toString()); 
     SG=Float.valueOf(SGet.getText().toString()); 



    } 

    private void evaluation() { 


     CalUpliftResult=Math.round(TotUplift*SG); 
     DiscResult=((Departure-Remaining-CalUpliftResult)/CalUpliftResult)*100; 

    } 

    private void setupView() { 
     RemainingET=(EditText)findViewById(R.id.remainingET); 
     DepartureET=(EditText)findViewById(R.id.departureET); 
     TotUpliftET=(EditText)findViewById(R.id.TotalUpliftET); 
     SGet=(EditText)findViewById(R.id.SGet); 

     CalcUpliftTV=(TextView)findViewById(R.id.CalUpliftResult); 
     DiscrepancyTV=(TextView)findViewById(R.id.discResult); 



    } 

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

} 
+0

Все мое приложение падает до того, как я даже дам ввод. Поэтому я не думаю, что вход не обрабатывается –

+0

Спасибо, когда я включил обработку исключений, приложение atleast теперь начинается. –

+0

Я решил проблему, это было действительно исключение из-за неправильного разбора. Я помещаю функцию getETvalue() внутри кнопок onclick, так что значения текстов редактирования анализируются, чтобы плавать только после ввода в них действительных данных. –

ответ

0

Вы должны убедиться, что строка может быть разобрана на поплавок. Вы можете добавить try-catch

try { 
    Remaining=Float.parseFloat(RemainingET.getText().toString()); 
} catch (NumberFormatException nfe) { 
    // Handle exception 
} 
0

Float.valueOf преобразует строку, содержащую число с плавающей запятой в виде строки. Но если строка содержит ничего, что не может быть разобрано в поплавок, то этот метод будет бросать NumberFormatException

как:

float f = Float.valueOf("12.35") //this is correct

Хотя

float f = Float.valueOf("abcd") //this is incorrect

, которая вызывает силу близко он должен метать NumberFormatException

From the javadocs

ValueOf

public static Float valueOf(String s) 
        throws NumberFormatException 
Returns a Float object holding the float value represented by the argument string s. 

Throws: 
NumberFormatException - if the string does not contain a parsable number. 
Смежные вопросы