java - Android 表单验证 - 如何防止空字段在按下按钮时导致应用程序崩溃?

标签 java android arraylist android-edittext android-button

我有一个表单,可以让用户将条目添加到抽奖中。但是,如果用户将这些字段之一留空并按下提交按钮,应用程序就会崩溃。我试图通过创建一个 if 语句来解决这个问题 - 如果任何字段为空,则不执行任何操作。否则,运行 Intent 。然而这仍然不能解决我的问题。按下按钮仍然会导致崩溃。

这是我的代码:

 public void addEntrySubmitButtonClick(View view) {


        Intent addEntryIntent = getIntent();
        int currentRaffleID = addEntryIntent.getIntExtra("raffleIndexInList", 0);
        Raffle currentRaffle = Raffle.raffleArrayList.get(currentRaffleID);
        String newEntryForename = String.valueOf(addEntryForename.getText());
        String newEntrySurname = String.valueOf(addEntrySurname.getText());
        int newEntryTelephoneNo = Integer.parseInt(String.valueOf(addEntryTelephoneNo.getText()));
        int newEntryTicketCount = Integer.parseInt(String.valueOf(addEntryTicketCount.getText()));
        int newEntryRaffleId = currentRaffle.getId();

        if ((newEntryForename.equals(null)) || (newEntrySurname.equals(null)) || (String.valueOf(addEntryTelephoneNo).equals(null)) || (String.valueOf(addEntryTicketCount).equals(null))){
        Intent failIntent = new Intent();
        } else {
            Entry newEntry = new Entry(newEntryForename, newEntrySurname, newEntryTelephoneNo, newEntryTicketCount, newEntryRaffleId);


            // Get the list of raffles
            for(Raffle currentEntryRaffle : Raffle.raffleArrayList) {
                if((currentEntryRaffle.getId() == newEntryRaffleId) && ((currentEntryRaffle.getEntryArrayList().size()) < (currentEntryRaffle.getMaxTickets()))) {
                    int counter=0;
                    do {
                        currentEntryRaffle.getEntryArrayList().add(newEntry);
                        counter++;
                    } while(counter < newEntryTicketCount);
                }
            }

            Intent returnIntent = new Intent();
            setResult(RESULT_CANCELED, returnIntent);
            finish();
        }

这是日志猫:

10-24 10:48:42.599  19481-19481/com.example.rafflemanager E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3628)
            at android.view.View.performClick(View.java:4128)
            at android.view.View$PerformClick.run(View.java:17142)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:4787)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at android.view.View$1.onClick(View.java:3623)
            at android.view.View.performClick(View.java:4128)
            at android.view.View$PerformClick.run(View.java:17142)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:4787)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NumberFormatException: Invalid int: ""
            at java.lang.Integer.invalidInt(Integer.java:138)
            at java.lang.Integer.parseInt(Integer.java:359)
            at java.lang.Integer.parseInt(Integer.java:332)
            at com.example.rafflemanager.AddEntry.addEntrySubmitButtonClick(AddEntry.java:48)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at android.view.View$1.onClick(View.java:3623)
            at android.view.View.performClick(View.java:4128)
            at android.view.View$PerformClick.run(View.java:17142)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:213)
            at android.app.ActivityThread.main(ActivityThread.java:4787)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
            at dalvik.system.NativeStart.main(Native Method)

最佳答案

newEntryForename.equals(null)

上面的表达式将计算为 false 或抛出 NullPointerException。不可能对 null 引用调用方法。

String.valueOf(addEntryTelephoneNo).equals(null)

上述表达式的计算结果始终为false。来自String.valueOf javadoc:

Returns: if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned.

你想要的只是简单

addEntryTelephoneNo == null

其他情况类似。

此外请注意,您正在尝试在对值进行空检查之前解析该值:

int newEntryTelephoneNo = Integer.parseInt(String.valueOf(addEntryTelephoneNo.getText()));

将该代码移至空检查之后。

关于java - Android 表单验证 - 如何防止空字段在按下按钮时导致应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545910/

相关文章:

java - 登录后Android存储用户ID

java - Spark 结构化流中提交消息

android - 无法解析依赖 Android Studio 3.0

java - Android 日期选择器,无法选择回溯日期,只能选择今天和 future 日期

java - 如何在 Java 中安全地访问数组线程?

java - ArrayLists iterator.next() 上出现 ConcurrentModificationException 的原因

java - java程序中通过互联网进行更新检查

java - 从 Maven 项目 - JavaFX (Afterburner.fx) 项目 : Currently stuck with Errormessage 创建工作 .jar

android - 仅在 float 操作按钮中显示图标

java - 如何通过搜索给定字符并创建新的 ArrayList 来分解 ArrayList<String>?