簡體   English   中英

雖然我已經提到了它的代碼,但當我沒有提供任何輸入時,我的應用程序會關閉

[英]My app shuts down when I don't give any input though I have mentioned the code for it

創建的應用程序會查找數字是否為三角形。 有關更多詳細信息,請參閱https://en.wikipedia.org/wiki/Triangular_number

現在,當我點擊按鈕而不在 TextView 中提供任何輸入時,應用程序會突然關閉。 不應該是這樣,因為我已經有一個 if 語句用於代碼中的空字符串。

    package com.example.numbershapes;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    class Number {
        int number;

        public boolean isTriangular() {
            int x = 1;
            int triangularNmbr = 1;
            while (triangularNmbr < number) {
                x++;
                triangularNmbr += x;
            }
            if(triangularNmbr == number) {
                return true;
            }
            else {
                return false;
            }
        }
    }
    public class MainActivity extends AppCompatActivity {
        public void testNumber(View view)
        {
            EditText usersNumber = 
            (EditText)findViewById(R.id.usersNumber);
            String message = "";
            if(usersNumber.getText().toString().isEmpty()){
                message = "Please enter a number";
            }
            Number myNumber = new Number();
            myNumber.number =
Integer.parseInt(usersNumber.getText().toString());


            //will display on logcat
            System.out.println(myNumber.isTriangular());

            if(myNumber.isTriangular()){
                message = myNumber.number + " is triangular" ;
            }
            else{
                message = myNumber.number + " is not triangular" ;
            }
            Toast.makeText(getApplicationContext(), message, 
            Toast.LENGTH_LONG).show();
        }

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

另外,我在事件日志中收到錯誤消息。 “無法為調試器綁定到本地 8600”。 有人能解釋一下是什么嗎?

這是應用程序的外觀**

  • 應用程序關閉時的 Logcat 詳細信息

**

2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6662) 2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118) 2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2599) 2019-09-08 00:38:56.005 4718 -4718/? 我/藝術:在 void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2707) 2019-09-08 00:38: 56.005 4718-4718/? I/art: at void android.app.ActivityThread.-wrap12(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) 2019 -09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1460) 2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102) 2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.os.Looper.loop() (Looper.java:154) 2019-09-08 00:38:56.005 4718-4718/? 我/藝術:在 void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6077) 2019-09-08 00:38:56.005 4718-4718/? I/art: 在 java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2) 2019-09-08 00: 38:56.005 4718-4718/? I/art:在 void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:866) 2019-09-08 00:38:56.005 4718-4718/? I/art:在 void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:756) 2019-09-08 00:38:56.142 1314-1322/? E/SurfaceFlinger:ro.sf.lcd_density 必須定義為構建屬性 2019-09-08 00:38:56.190 4718-4734/com.example.numbershapes I/OpenGLRenderer: Initialized EGL, version 1.4 2019-09-08 00 :38:56.190 4718-4734/com.example.numbershapes D/OpenGLRenderer: 交換行為 1 2019-09-08 00:38:56.192 4718-4734/com.example.numbershapes W/OpenGLRenderer: 無法選擇帶有 EDGORVED_SWAP_AVIGORVED_的配置重試沒有... 2019-09-08 00:38:56.192 4718-4734/com.example.numbershapes D/OpenGLRenderer:交換行為 0 2019-09-08 00:38:56.320 4718-4734/com.example.example. D/EGL_emulation: eglCreateContext: 0x8d11ba20: maj 2 min 0 rcv 2 2019-09-08 00:38:56.596 4718-4734/com.example.numbershapes D/EGL_emulation: eglMakeCurrent: 0x20709t 0x207007000000000 09-08 00:38:56.634 4718-4718/com.example.numbershapes W/art:在 Android 4.1 之前,方法 int android.support.v7.widget.DropDownListView.lookForSelectablePosition(int, boolean) 會錯誤地覆蓋包 - android.widget.ListView 中的私有方法 2019-09-08 00:38:56.693 4718-4734/com.example.numbershapes D/EGL_emulation: eglMakeCurrent: 0x8d11ba20: ver 2 0 (tinfo 0x9b7603080)-- :56.996 1601-1621/? I/ActivityManager: 顯示 com.example.numbershapes/.MainActivity: +1s767ms 2019-09-08 00:38:57.010 1671-1862/? D/EGL_emulation: eglMakeCurrent: 0xa8e855a0: ver 2 0 (tinfo 0xa8e83640) 2019-09-08 00:38:57.035 1601-1751/? I/WindowManager:由 com.android.server.wm.WindowStateAnimator.destroySurface:2016 com.android.server.wm.WindowStateAnimator 調用的銷毀表面 Surface(name=com.android.systemui/com.android.systemui.recents.RecentsActivity) .destroySurfaceLocked:882 com.android.server.wm.WindowState.destroyOrSaveSurface:2100 com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3024 com.android.server.wm.WindowManagerService.relayoutWindow:2904 com.android.server. .Session.relayout:224 android.view.IWindowSession$Stub.onTransact:286 com.android.server.wm.Session.onTransact:145 2019-09-08 00:38:57.192 1601-1621/? I/WindowManager: Destroying Surface Surface(name=Starting com.example.numbershapes) 由 com.android.server.wm.WindowStateAnimator.destroySurface:2016 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:882 com.android.server 調用.wm.WindowState.destroyOrSaveSurface:2100 com.android.server.wm.AppWindowToken.destroySurfaces:363 com.android.server.wm.WindowStateAnimator.finishExit:565 com.android.server.wm.WindowStateAnimator.stepAnimationLocked:491 com. .server.wm.WindowAnimator.updateWindowsLocked:303 com.android.server.wm.WindowAnimator.animateLocked:704 2019-09-08 00:38:58.432 1360-1394/? W/audio_hw_generic: 沒有向 HAL 提供足夠的數據,預期位置 5063852 ,只寫了 4803840 2019-09-08 00:39:00.016 1671-1862/? D/EGL_emulation: eglMakeCurrent: 0xa8e855a0: ver 2 0 (tinfo 0xa8e83640) 2019-09-08 00:39:00.232 4718-4718/com.example.numbershapes D/AndroidRuntime: Shutting down: Shutting down 0xa8e83640 00.241 4718-4718/com.example.numbershapes E/AndroidRuntime:致命異常:主進程:com.example.numbershapes,PID:4718 java.lang.IllegalStateException:無法在 android.support.v7 上執行 android:onClick 的方法。 app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22265) at android.os .Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main( ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os。 ZygoteInit.main(Zygot eInit.java:756) 引起:java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385 ) 在 android.view.View.performClick(View.java:5610) 在 android.view.View$PerformClick.run(View.java:22265) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android .os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect。 Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 引起: java.lang.NumberFormatException:對於輸入字符串:"" at java.lang.Integer.parseInt(Integer.java:533) at java.lang.Integer.parseInt(Integer.java:556) at com.example.numbershapes.MainActivity .testNumber(MainActivity.java:36) 在 java .lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) at android.view.View.performClick(View.java:5610) at android .view.View$PerformClick.run(View.java:22265) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os。 Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 2019-09-08 00:39:00.241 1360-1393/? W/audio_hw_generic: 沒有向 HAL 提供足夠的數據,預期位置 4803995 ,只寫了 4803840 2019-09-08 00:39:00.244 1601-1612/? W/ActivityManager:強制完成活動 com.example.numbershapes/.MainActivity 2019-09-08 00:39:00.325 1601-4290/? I/OpenGLRenderer:初始化 EGL,版本 1.4 2019-09-08 00:39:00.325 1601-4290/? D/OpenGLRenderer:交換行為 1 2019-09-08 00:39:00.327 1601-4290/? W/OpenGLRenderer:無法選擇帶有 EGL_SWAP_BEHAVIOR_PRESERVED 的配置,重試沒有... 2019-09-08 00:39:00.327 1601-4290/? D/OpenGLRenderer:交換行為 0 2019-09-08 00:39:00.347 1601-4290/? D/EGL_emulation: eglCreateContext: 0x8ec4d1c0: maj 2 min 0 rcv 2 2019-09-08 00:39:00.368 1601-4290/? D/EGL_emulation: eglMakeCurrent: 0x8ec4d1c0: ver 2 0 (tinfo 0x8e191ff0) 2019-09-08 00:39:00.405 1601-4290/? D/EGL_emulation: eglMakeCurrent: 0x8ec4d1c0: ver 2 0 (tinfo 0x8e191ff0) 2019-09-08 00:39:00.758 1601-1614/? W/ActivityManager:ActivityRecord 的活動暫停超時{aa667d7 u0 com.example.numbershapes/.MainActivity t26 f} 2019-09-08 00:39:00.803 1314-1322/? D/gralloc_ranchu: gralloc_alloc: 創建大小為 2691072 的 ashmem 區域 2019-09-08 00:39:00.842 1314-1314/? E/EGL_emulation: tid 1314: eglCreateSyncKHR(1901): error 0x3004 (EGL_BAD_ATTRIBUTE) 2019-09-08 00:39:01.450 2026-2273/? D/EGL_emulation: eglMakeCurrent: 0xa8e85420: ver 2 0 (tinfo 0xa8e838e0) 2019-09-08 00:39:01.938 2026-2273/? W/OpenGLRenderer:在視圖上錯誤地調用了 buildLayer:ShortcutAndWidgetContainer,正在破壞層... 2019-09-08 00:39:01.952 1601-1614/? I/ActivityManager: Killing 3960:com.google.android.apps.photos/u0a63 (adj 906): empty for 3445s 2019-09-08 00:39:02.006 1601-1658/? D/ActivityManager:cleanUpApplicationRecord -- 3960 2019-09-08 00:39:03.453 1360-1394/? W/audio_hw_generic: 沒有向 HAL 提供足夠的數據,預期位置 5110293 ,只寫了 4957920 2019-09-08 00:39:14.093 1601-1614/? W/ActivityManager:ActivityRecord 的活動銷毀超時{aa667d7 u0 com.example.numbershapes/.MainActivity t26 f} 2019-09-08 00:39:14.098 1601-1614/? I/WindowManager:銷毀由 com.android.server.wm.WindowStateAnimator.destroySurface:2016 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked 調用的表面 Surface(name=com.example.numbershapes/com.example.numbershapes.MainActivity) :882 com.android.server.wm.WindowState.removeLocked:1456 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2484 com.android.server.wm.WindowManagerService.removeWindowLocked:2442 com.android.server.wm.WindowManagerService .removeWindowLocked:2311 com.android.server.wm.AppWindowToken.removeAllWindows:530 com.android.server.wm.AppWindowToken.removeAppFromTaskLocked:326 2019-09-08 00:39:16.767 1314-1326/ W/SurfaceFlinger:等待硬件垂直同步超時; 假裝 2019-09-08 00:39:17.955 1601-1621/? I/編舞:跳過37幀! 應用程序可能在其主線程上做了太多工作。

當我運行它時,它會引發異常。 您的行號可能不同,但原因相同:

     Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.Integer.parseInt(Integer.java:620)
        at java.lang.Integer.parseInt(Integer.java:643)
        at stackoverflow57836483.MainActivity.testNumber(MainActivity.java:39)

有問題的線路是:

myNumber.number = Integer.parseInt(usersNumber.getText().toString());

但真正的原因發生得更早。
在這里,您已經知道輸入無效,但您繼續執行並將其解析為數字。

if(usersNumber.getText().toString().isEmpty()){
   message = "Please enter a number";
}

除了顯示 Toast 之外,您應該將后面的所有內容放入else { } 正確的代碼是:

        public void testNumber(View view)
        {
            EditText usersNumber = (EditText)findViewById(R.id.usersNumber);
            String message = "";
            if(usersNumber.getText().toString().isEmpty()){
                message = "Please enter a number";
            } else {                                // ELSE STARTS HERE...
                Number myNumber = new Number();
                myNumber.number = Integer.parseInt(usersNumber.getText().toString());

                //will display on logcat
                System.out.println(myNumber.isTriangular());

                if(myNumber.isTriangular()){
                    message = myNumber.number + " is triangular" ;
                }
                else{
                    message = myNumber.number + " is not triangular" ;
                }
            }                                       // AND ENDS HERE
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM