【问题标题】:Crash if digit is more than 9如果数字大于 9,则崩溃
【发布时间】:2016-11-14 04:21:40
【问题描述】:

我的应用程序有一个用户可以输入端口号的输入,我出于好奇尝试输入超过 9 位数字(例如:1234567890),应用程序将崩溃。如何防止它崩溃?

编辑 我正在为 Android 使用 Java 语言

编码

public class addActivity extends Activity{

  EditText savedName,savedIP,savedPort,savedUserID,savedUserPass,savedChannel;
  Button btnSave;
  Button btnBack;
  String addressList;
  FileOutputStream outputStream;

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

savedName = (EditText)findViewById(R.id.editName);
savedIP = (EditText)findViewById(R.id.editIP);
savedPort = (EditText)findViewById(R.id.editPort);
savedUserID = (EditText)findViewById(R.id.userID);
savedUserPass = (EditText)findViewById(R.id.userPass);
savedChannel = (EditText)findViewById(R.id.editChannel);
btnSave = (Button)findViewById(R.id.btnSave);
btnBack = (Button)findViewById(R.id.btnBack);


try{
     String channelNumString = savedChannel.getText().toString();
     int channelNum = Integer.parseInt(String.valueOf(channelNumString));

     addressList = savedName.getText().toString();

        outputStream = openFileOutput(addressList, Context.MODE_PRIVATE);
        //outputStream.write(savedName.getText().toString().getBytes());
        outputStream.write("4-".getBytes());
        outputStream.write(savedIP.getText().toString().getBytes());
        outputStream.write(":".getBytes());
        outputStream.write(savedPort.getText().toString().getBytes());
        outputStream.write("/user=".getBytes());
        outputStream.write(savedUserID.getText().toString().getBytes());
        outputStream.write("&password=".getBytes());
        outputStream.write(savedUserPass.getText().toString().getBytes());
        outputStream.write(System.getProperty("line.separator").getBytes());
        outputStream.close();
        Toast.makeText(getBaseContext(), "Address Saved !", Toast.LENGTH_SHORT).show();
        savedName.setText("");
        savedIP.setText("");
        savedPort.setText("");
        savedUserID.setText("");
        savedUserPass.setText("");
        savedChannel.setText("");

else{
        Toast.makeText(getBaseContext(),"Apps does not support " + channelNumString + " channels",Toast.LENGTH_LONG).show();
      }
 }catch (Exception e){
      e.printStackTrace();
    }

布局

<EditText
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:id="@+id/editChannel"
        android:background="@android:drawable/edit_text"
        android:maxLines="1"
        android:layout_gravity="center_horizontal"
        android:inputType="number"
        android:digits="0123456789."/>

这是我遇到问题的部分

【问题讨论】:

  • 您使用哪种语言?你的崩溃代码是什么?
  • 问:How do I prevent it from crashing? 答:不要输入超过 10 个数字。我的意思是说真的,你怎么能期望得到比你提供的信息更好的答案呢?
  • 根据您过去的问题,我假设这是 Java。您将需要进行一些输入验证,或者使用try 块。没有代码,谁知道呢。
  • @John3136,我知道答案很明显,但是当出现这样的错误时,即使人们不应该输入更多内容,也会让我很恼火
  • @4castle,是的,我正在使用 Java,对于没有在我的问题中说明这一点,我深表歉意

标签: java android numbers


【解决方案1】:

我假设您使用的是EditText。所以你需要使用addTextChangedListener()

试试下面的方法,

YOUR_EDIT_TEXT.addTextChangedListener(new TextWatcher() 
          {
               public void afterTextChanged(Editable s) {}
               public void beforeTextChanged(CharSequence s, int start,int count, int after){} 

               public void onTextChanged(CharSequence s, int start,int before, int count) 
               {
                    if(s.length() > 9)
                      {
                         //Do your stuff .
                         // You may show the intimation to user like don't try with more than 9 digits
                      }
                      else
                      {
                          //Do your stuff
                      }
               }

          });

这可能会对你有所帮助。

【讨论】:

  • 谢谢你的回答,这很好。但我更喜欢eLemEnt的回答,因为它更简单。我将使用此代码以供将来参考
【解决方案2】:

@Fay Zan

基本上,您不希望用户为您的字段输入超过 9 位数字, 这可以通过两种方式以编程方式或使用布局视图属性来实现,

在你的 xml 中简单地将这个属性赋予你的EditText

android:maxLength="9"

或以编程方式检查字段的长度。例如假设你的字段的 id 是@id+/portNo

然后像这样进行验证

private EditText mportNo;

在你的onCreate()里面

mportNo = (EditText) findViewById(R.id.portNo);
String portValue = mportNo.getText().toString();

if(portValue.length() > 9) {
    // throw error
}

【讨论】:

  • 如此简单,却又完美!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多