2017-04-19 4 views
0

길이를 다른 단위로 변환하도록 설계된 앱을 만들고 있습니다. 2 미터를 센티미터로 변환하려고한다고 가정 해 봅시다. InputType이 numberDecimal 인 EditText에 값을 입력해야합니다. 그런 다음 스피너에서 미터를 선택한 다음 다른 스피너에서 센티미터로 변환하도록 선택합니다. 앱을 완전히 자동화하고 TextWatcher를 추가하기로 결정했습니다. 문제는 EditText에서 모든 것을 삭제할 때, 분명히 (0이 아닌) 아무것도 곱하거나 나눌 수 없으며 메소드를 실행하기 때문에 앱이 충돌합니다. 문제의 해결책이 있습니까? 나는 이것을 시도,하지만 여전히 추락 : EditText의 기본값

FATAL EXCEPTION: main 
Process: n1.theconverter, PID: 5585 
java.lang.NumberFormatException: Invalid double: "" 
    at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
    at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
    at java.lang.Double.parseDouble(Double.java:301) 
    at java.lang.Double.valueOf(Double.java:338) 
    at n1.theconverter.MainActivity$3.afterTextChanged(MainActivity.java:87) 
    at android.widget.TextView.sendAfterTextChanged(TextView.java:8007) 
    at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10168) 
    at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043) 
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560) 
    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
    at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
    at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:244) 
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:389) 
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

사전 :

편집에 감사 : 새로운 로그 캣 :

java.lang.NumberFormatException: Invalid double: "" 
                   at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                   at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                   at java.lang.Double.parseDouble(Double.java:301) 
                   at java.lang.Double.valueOf(Double.java:338) 
                   at n1.theconverter.MainActivity.lengthConverter(MainActivity.java:176) 
                   at n1.theconverter.MainActivity$3.onTextChanged(MainActivity.java:91) 
                   at android.widget.TextView.sendOnTextChanged(TextView.java:7991) 
                   at android.widget.TextView.handleTextChanged(TextView.java:8053) 
                   at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10157) 
                   at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033) 
                   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
                   at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:106) 
                   at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:51) 
                   at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:215) 
                   at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) 
                   at android.widget.TextView.doKeyDown(TextView.java:6098) 
                   at android.widget.TextView.onKeyDown(TextView.java:5911) 
                   at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
                   at android.view.View.dispatchKeyEvent(View.java:9234) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) 
                   at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) 
                   at android.app.Activity.dispatchKeyEvent(Activity.java:2725) 
                   at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:541) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forwa 
04-19 20:38:03.451 6053-6053/n1.theconverter D/AndroidRuntime: Shutting down VM 


                  --------- 
beginning of crash 
04-19 20:38:03.451 6053-6053/n1.theconverter E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: n1.theconverter, PID: 6053 
                  java.lang.NumberFormatException: Invalid double: "" 
                   at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                   at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                   at java.lang.Double.parseDouble(Double.java:301) 
                   at java.lang.Double.valueOf(Double.java:338) 
                   at n1.theconverter.MainActivity.lengthConverter(MainActivity.java:176) 
                   at n1.theconverter.MainActivity$3.onTextChanged(MainActivity.java:91) 
                   at android.widget.TextView.sendOnTextChanged(TextView.java:7991) 
                   at android.widget.TextView.handleTextChanged(TextView.java:8053) 
                   at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10157) 
                   at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033) 
                   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:225) 
                   at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:224) 
                   at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:106) 
                   at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:51) 
                   at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:215) 
                   at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138) 
                   at android.widget.TextView.doKeyDown(TextView.java:6098) 
                   at android.widget.TextView.onKeyDown(TextView.java:5911) 
                   at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
                   at android.view.View.dispatchKeyEvent(View.java:9234) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                   at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) 
                   at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) 
                   at android.app.Activity.dispatchKeyEvent(Activity.java:2725) 
                   at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:541) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
                   at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
                   at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127) 
                   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3 

답변

0

: 같은

2
을 여기
final EditText lengthEntry = (EditText) findViewById(R.id.enterLength); 
lengthEntry.addTextChangedListener(new TextWatcher() { 
final EditText lengthEntry = (EditText) findViewById(R.id.enterLength); 
    lengthEntry.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
     @Override 
     public void afterTextChanged(Editable s) {} 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (Double.valueOf(lengthEntry.getText().toString()) == ""){} else { 
       lengthConverter(); 
      } 
     } 
    }); 

는 로그 캣입니다

java.lang.NumberFormatException : 잘못된 이중 : ""

Double 값으로 문자열을 비교할 수 없습니다. 그래도 editText에 값이 있는지 확인할 수 있습니다. 그렇다면 계산 방법을 호출하십시오. 시도해보십시오.

private EditText lengthEntry; //Declare globally 

lengthEntry = (EditText) findViewById(R.id.enterLength); 
lengthEntry.addTextChangedListener(new TextWatcher() { 
@Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (!lengthEntry.getText().toString().equals("")){ 
       lengthConverter(); 
      } 
     } 

희망이 있습니다.

+1

이미 시도했지만 작동하지 않았습니다. –

+0

아직 충돌이 있습니까 ?? 오류 로그를 보여 주시겠습니까? 위와 같을 수 없습니다. – tahsinRupam

+0

동일한 오류가 발생하기 때문에 lengthConverter()가 여전히 실행 중이라고 생각합니다 (잘못된 double : ""). 아마도 기본 값 (텍스트가 없을 때)이 ""이 아니라고 생각했을 것입니다. –

0

여기서 두 가지 작업을 수행합니다. 먼저 LENGTH> 0인지 확인하십시오. 두 번째는 실제로 변경 가능한지 확인하십시오. 예 : '-'또는 '.'만이 아닙니다. 하지만 - #

+0

그래도 작동하지 않습니다 : ( –

0

lengthEntry의 입력 필드가 올바른지 확인하십시오. 너는 길이 및 입력을보기 위하여 System.out.println();을 시도 할 수 있는다.

그리고 Doube.parseDouble(lenghtEntry.getText().toString());으로 값을 분석하십시오.

동일한 문제가 있으며 ID가 잘못되었습니다. 나는 내 문제에 대한 해결책을 발견

@Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (s.equals(""){ 
      lengthEntry.setText("0"); 
     } else { 
      lengthConverter(); 
     } 

    } 
+0

ID가 정확합니다. –

0
이 당신의 상태를 변경

, 당신의 onTextChange가 보일 것입니다. if 메소드의 부울이 올바르지 않습니다. 올바른 방법은 다음과 같습니다.

if (lengthEntry.getText().toString().isEmpty()){ 
    tvAnswer.setText("0.0"); 
} else { 
    lengthConverter(); 
} 

어쨌든 고마워!

+0

아니요 :(아직 없습니다 –

+0

다시 시도하십시오. 문제가 귀하의'lengthConverter();'에 있을지도 모르는 경우 기본값을 추가하십시오. – AlexGuerra