2012-05-09 2 views
3

나는 그에게 몇 차례 질문을 받았음을 알고 있지만, 나는 운이 좋았던 모든 것을 시도해 왔습니다. 아직 오류가 있습니다. 여기 내 코드가있다.EditText에서 숫자를 가져옵니다

XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="center" 
android:background="@android:color/transparent" 
android:gravity="center" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Write item value." 
    android:textColor="@android:color/black" 
    android:textSize="25dp" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="202dp" 
    android:ems="10" 
    android:hint="Value" 
    android:inputType="number" > 

    <requestFocus /> 
</EditText> 

자바

public class PopupValores extends Activity { 

    EditText valor1; 
    String myEditValue; 
    public static int valor; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.popupvalores); 

     valor1 = (EditText) findViewById (R.id.editText1); 
     myEditValue = valor1.getText().toString(); 
     valor = Integer.parseInt(myEditValue); <<<<Line 20 

    } 
} 

로그 캣

05-08 21:02:10.023: W/dalvikvm(6074): threadid=1: thread exiting with uncaught exception (group=0x40020578) 
05-08 21:02:10.039: E/AndroidRuntime(6074): FATAL EXCEPTION: main 
05-08 21:02:10.039: E/AndroidRuntime(6074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dc.maker/com.dc.maker.PopupValores}: java.lang.NumberFormatException: unable to parse '' as integer 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.os.Looper.loop(Looper.java:130) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at dalvik.system.NativeStart.main(Native Method) 
05-08 21:02:10.039: E/AndroidRuntime(6074): Caused by: java.lang.NumberFormatException: unable to parse '' as integer 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at java.lang.Integer.parseInt(Integer.java:362) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at java.lang.Integer.parseInt(Integer.java:332) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at com.popupclass.PopupValores.onCreate(PopupValores.java:20) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
05-08 21:02:10.039: E/AndroidRuntime(6074):  ... 11 more 

나는 글고에서 INT를 가져온 다음 다른 클래스에서 사용하려고 해요 가치를 결정하기 위해 어떤 것. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

감사

+1

당신은 오류를 얻고있다. 'valor'의 가치는 무엇입니까? (하, 그거 아이러니 야.) – Sam

+0

롤 예, LogCat이 추가되었습니다. 편집 : valor는 EditText에서 사용자가 기록한 숫자의 값이어야합니다. –

+0

EditText에 무엇을 쓸지라도 gettint 0입니다. 이유는 무엇입니까? –

답변

3

는 예외입니다. 아래

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.popupvalores); 

    valor1 = (EditText) findViewById (R.id.editText1); 
    myEditValue = valor1.getText().toString(); 

    Log.debug("logtag", myEditValue); // Here you can see the output. 

    try { 
     valor = Integer.parseInt(myEditValue); 
    } 
    catch(Exception e) { 
     Log.e("logtag", "Exception: " + e.toString()); 
    } 
} 
+0

EditText에 내가 쓴 것과 상관없이 gettint 0입니다. 이유가 무엇입니까? –

+0

이 코드는 활동을 생성 할 때만 트리거됩니다. 런타임에는 EditText에 아무 것도 없습니다. EditBox에서 숫자 만 사용하고 있습니까? 또한 myEditValue의 문자열 값을 확인하십시오. 아마도 '1'또는 이와 비슷한 값일 것입니다. 이 경우 Integer.parseInt가 구문 분석하는 데 문제가 있습니다. – hallizh

1

당신은 너무 빨리 접근 valor1하려고하는이 valor1는 현재 빈 문자열입니다. 사용자가 무언가를 정의 할 기회를 얻은 후에는 값을 처리해야합니다. 이 같은 버튼을 추가

보십시오 : 당신이 onCreate()Integer.parseInt(myEditValue)을했기 때문에

(Button) button = (Button) findViewByID(R.id.button1); 
button.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 
     String temp = valor1.getText().toString(); 
     if(temp.isEmpty() == false) { 
      valor = Integer.parseInt(temp); 
      Log.v("SO", "Valor = " + valor); 
     } 
    } 
} 
+0

좋아, 그 코드를 기다릴께. 그걸 어떻게해야할지 모르겠다. –

+0

@Sam, 기억 하듯이'String.isEmpty()'는 Android SDK에는 존재하지 않습니다. – neevek

+0

의견을 보내 주시면 감사하겠습니다 만 여기 [일부 문서] (http://developer.android.com/reference/java/lang/String.html#isEmpty%28%29) – Sam

0

귀하의 위의 코드는 확실히 당신의 활동이 만들어지는 시점에서, 당신 글고 치기는 아직 가득되지 않은, 문제의 원인이됩니다 text이며 XML 정의에 기본값을 제공하지 않았으므로 빈 문자열이며 Integer.parseInt(emptyString)NumberFormatException을 반환합니다.

올바른 방법은 EditText 값을 구문 분석하는 코드를 사용자 이벤트에 응답하는 어딘가로 이동하거나 간단히 try...catchInteger.parseInt()입니다.

가장 안전한 방법은, 때문에 우리가해야 절대 신뢰 사용자의 입력 항상에 try...catchInteger.parseInt()입니다.

1

코드가 EditText '에서 빈 문자열을 구문 분석하려고 시도하면 예외가 throw됩니다.

예제 코드에는 LinearLayout 닫기 태그가 없습니다.

Java.lang.NumberFormatException: unable to parse '' as integer 

그리고 editbox1 필드에 값이 없기 때문에 그것은 단지이다 :

1

를 사용하여 정규 표현식 ... : 그래서 로그 캣 추적을 게시하시기 바랍니다 경우

public class PopupValores extends Activity { 

EditText valor1; 
String myEditValue; 
public static int valor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.popupvalores); 

    valor1 = (EditText) findViewById (R.id.editText1); 
    myEditValue = valor1.getText().toString(); 
    valor = Integer.parseInt(myEditValue.replaceAll("[\\D]","")); 

} 

}

관련 문제