2015-04-27 25 views
0

所以我目前正在製作一個需要號碼選擇器的應用程序。我使用-button textview +按鈕佈局創建了數字選擇器。除了刪除號碼並嘗試按下任何按鈕之外,選取器都可以正常工作,此時應用程序會崩潰。Android應用程序自定義號碼選擇器

public class MainActivity extends Activity implements OnClickListener { 
Button btnUp, btnDown; 
EditText editTextSonyResult; 

int nStart = (-100); 
int nEnd = 250; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btnUp = (Button) findViewById(R.id.plusButton1); 
    btnDown = (Button) findViewById(R.id.minusButton1); 


    editTextSonyResult = (EditText) findViewById(R.id.numberView1); 

    editTextSonyResult.setText("0"); 

    btnUp.setOnClickListener(this); 
    btnDown.setOnClickListener(this); 
} 

public void onClick(View v) { 
    String getString = String.valueOf(editTextSonyResult.getText()); 
    int current = Integer.parseInt(getString); 


    if (v == btnUp) { 
     if (current < nEnd) { 

      current++; 
      editTextSonyResult.setText(String.valueOf(current)); 
     } 

    } 
    if (v == btnDown) { 
     if (current > nStart) { 

      current--; 
      editTextSonyResult.setText(String.valueOf(current)); 

     } 
    } 
} 

任何幫助,將不勝感激。 乾杯

這裏是在誤差 04-27 19的點的logcat:58:10.042 3016-3016/com.example.liam.sonyreportingapp d/AndroidRuntime:關閉VM 04-27 19時58分:10.042 3016-3016/com.example.liam.sonyreportingapp E/AndroidRuntime:致命例外:main 進程:com.example.liam.sonyreportingapp,PID:3016 java.lang.NumberFormatException:Invalid int:「」 at java java.lang.Integer.parseInt(Integer.java:138) at com.example(java.lang.Integer.parseInt .liam.sonyreportingapp.MainActivity.onClick(MainActivity .java:42) at android.view.View.performClick(View.java:4780) at android.view.View $ PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler .java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java :5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller。運行(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

+0

的電流變爲零..這就是原因 – Prakhar

回答

1

EditText將允許用戶手動輸入條目。如果你不想讓用戶擁有這個能力,那就改用TextView。

它崩潰您

int current = parseInt(getString); 

,因爲如果因爲用戶清除了框,然後parseInt函數將返回NaN(非數字),因此崩潰不能存儲爲一個int您的EditText是空的。

編輯:下面是它可能看起來像處理時,它們將關閉Android鍵盤,但留下的空白項,不要忘了檢查非數字輸入,也不僅僅是那些空白..

((EditText)findViewById(R.id.numberView1)).setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
        //CHECK USER INPUT HERE. IF BLANK SET BACK TO 0 or DO NOT UPDATE VALUE ETC 
       return true; 
      } 
      //I think this is if user presses back instead of pressing done/ok but i've never added code here 
      return false; 
     } 
    }); 

然後加入

android:imeActionId="@+id/IME_ACTION_SEND" 

在裏面的EditText在XML

編輯:刪除的問題。

此外,如果btnDown檢查當前> nEnd,而不是小於?或者當前< nStart。我不相信你想要兩個完全相同的檢查。

+0

對不起,我的命名約定錯了。它實際上是一個編輯文本,因此用戶可以手動更改它。我已經改變了 Zylo

+0

好吧,EditText會讓他們改變它。我認爲這是ParseInt返回NaN的根 - 可以用你的堆棧跟蹤來確認。如果你想允許用戶手動編輯字段(沒有你的按鈕),看到我的編輯與輸入管理器的代碼(Android鍵盤) – thurst0n

+0

是的,就像我懷疑。看看你發佈的堆棧跟蹤的第5和第6行。只需在某處添加一些代碼以檢查用戶輸入的內容。如果它是空白或非數字的東西,那麼在用parseint更新當前變量之前,您需要處理該變量。 – thurst0n