0

変換は他のクラスです、私はで働いていMainActivityます;

edittextをクリアしてから「-」を入力するとエラーが発生しますが、値を入力してからedittextの最初の位置にエラーが発生しない場合、plzはエラーログを添付するのに役立ちます。

Conversion conversion;


conversion = new Conversion();


@Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
if(edittext.length()!=0){
String Result =conversion.temp(spinner1.getSelectedItemPosition(),
        spinner2.getSelectedItemPosition(),edittext.getText().toString());
 textView.setText(Result);
 }

 }

これが私の機能です

public String temp(int ddfrom,int ddto,String edittextvalue) {

float s;
    float inputValue = Float.parseFloat(edittextvalue);
    s = rate*inputValue;
return String.valueOf(s);

}
    02-04 12:56:33.029: E/AndroidRuntime(317): Uncaught handler: thread main exiting due to uncaught exception
      02-04 12:56:33.119: E/AndroidRuntime(317): java.lang.NumberFormatException: -
      02-04 12:56:33.119: E/AndroidRuntime(317):    at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:149)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:319)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at java.lang.Float.parseFloat(Float.java:288)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.sample.unitconverter.Conversion.timee(Conversion.java:651)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.sample.unitconverter.UnitConverter$6.onTextChanged(UnitConverter.java:397)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.widget.TextView.handleTextChanged(TextView.java:6172)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:578)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:231)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at      com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:57)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.os.Handler.dispatchMessage(Handler.java:99)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.os.Looper.loop(Looper.java:123)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at android.app.ActivityThread.main(ActivityThread.java:4363)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at java.lang.reflect.Method.invokeNative(Native Method)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at java.lang.reflect.Method.invoke(Method.java:521)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
      02-04 12:56:33.119: E/AndroidRuntime(317):    at dalvik.system.NativeStart.main(Native Method)
4

4 に答える 4

1

これは、「-」を解析してfloatにできず、NumberFormatExceptionが発生するためです。

public String temp(int ddfrom,int ddto,String edittextvalue) {
    float s;
    try {
        float inputValue = Float.parseFloat(edittextvalue);
        s = rate*inputValue;
        return String.valueOf(s);
    }
    catch (NumberFormatException nfe) {
           //Error handling.
    }
    return null;
}
于 2013-02-04T13:21:59.537 に答える
1

最初はあなたの方法は

public String temp(int ddfrom,int ddto,String edittextvalue) {
float s;
try {
    float inputValue = Float.parseFloat(edittextvalue);
    s = rate*inputValue;
    return String.valueOf(s);
catch (NumberFormatException nfe) {
       //Error handling.
}
return "";

}

そしてリスナーコードを次のように更新します

@Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
if(edittext.length()!=0){
     if(edittext.length()==1 && "-".equals(edittext.getText().toString())) {
         //Nothing to do
     } else {

         String Result =conversion.temp(spinner1.getSelectedItemPosition(),
        spinner2.getSelectedItemPosition(),edittext.getText().toString());
        textView.setText(Result);
     }
 }
于 2013-02-04T13:31:15.807 に答える
0

何をしているのかわかりませんが、onTextChanged関数(関数を呼び出すtemp)でテキストが変更されるたびにfloatを解析しています

tempたとえば、解析エラーが発生した場合に0を返すように関数を修正しました。これは、文字列「-」がFloatとして解析されないために発生します。

public String temp(int ddfrom,int ddto,String edittextvalue) {
        try {
        float s;
        float inputValue = Float.parseFloat(edittextvalue);
        s = rate*inputValue;
        return s;
    } catch(Exception ex) {
        return "0";
    }

}
于 2013-02-04T13:19:07.780 に答える
0

使用している場合android:inputType="numberDecimal"は負の数を許可しません。その場合、追加する必要があります:android:inputType="numberDecimal|numberSigned" それはあなたの場合に機能します

于 2013-02-04T13:21:14.097 に答える