簡體   English   中英

Android App正常運行,但一段時間后崩潰

[英]Android App works but after a while it crashes

這個應用程序可以正常工作,直到在其中輸入數字30秒后才崩潰。 我認為這是一個記憶問題,但我可能是錯的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:ems="10"
    android:inputType="numberSigned|numberDecimal" 
    android:imeOptions="actionDone">

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/editText1"
    android:ems="10" 
    android:inputType="numberSigned|numberDecimal"
    android:imeOptions="actionDone"/>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/editText1"
    android:layout_alignParentLeft="true"
    android:text="@string/C"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/editText2"
    android:layout_alignParentLeft="true"
    android:text="@string/F"
    android:textAppearance="?android:attr/textAppearanceLarge" />

public class MainActivity extends Activity {

EditText text1, text2, text3, text4, text5;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text1 = (EditText) findViewById(R.id.editText1);
    text1.addTextChangedListener(watcher1);
    text2 = (EditText) findViewById(R.id.editText2);
    text2.addTextChangedListener(watcher2);

    }
    // Celcius
    TextWatcher watcher1 = new TextWatcher() {
         public void afterTextChanged(Editable s) {
             if(text1.getText().toString().length() == 0)
             {
                 return;
             }
                if (text1.hasFocus() == true ) {
                    float inputValue = Float.parseFloat(text1.getText().toString());
                    text2.setText(String.valueOf(convertCelsiusToFahrenheit(inputValue)));
                }
            }
            public void beforeTextChanged(CharSequence s, int start, int count,
                            int after) {
            }
            public void onTextChanged(CharSequence s, int start, int before,
                            int count) {
            }
        };
    // Fahrenheit   
    TextWatcher watcher2 = new TextWatcher() {
        public void afterTextChanged(Editable s) {
            if(text2.getText().toString().length() == 0)
            {
                return;
            }
                if (text2.hasFocus() == true ) {
                    float inputValue = Float.parseFloat(text2.getText().toString());
                    text1.setText(String.valueOf(convertFahrenheitToCelsius(inputValue)));
            }
        }
        public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
        }
        public void onTextChanged(CharSequence s, int start, int before,
                        int count) {
        }
    };



//Converts C to F
private float convertCelsiusToFahrenheit(float celsius) {
 return (float) ((celsius * 1.8) + 32);
}


//Converts F to C
private float convertFahrenheitToCelsius(float fahrenheit) {
 return (float) ((fahrenheit - 32) / 1.8);
    }

}

    10-18 13:57:18.201: D/AndroidRuntime(1280): Shutting down VM
10-18 13:57:18.201: W/dalvikvm(1280): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
10-18 13:57:18.291: E/AndroidRuntime(1280): FATAL EXCEPTION: main
10-18 13:57:18.291: E/AndroidRuntime(1280): java.lang.NumberFormatException: Invalid float: "-"
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.StringToReal.invalidReal(StringToReal.java:63)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.StringToReal.initialParse(StringToReal.java:151)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.StringToReal.parseFloat(StringToReal.java:304)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.Float.parseFloat(Float.java:300)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.thenegative.temerature.converter2.MainActivity$1.afterTextChanged(MainActivity.java:31)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.widget.TextView.sendAfterTextChanged(TextView.java:7095)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:8743)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:212)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:30)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:94)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:49)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:155)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:138)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.widget.TextView.doKeyDown(TextView.java:5240)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.widget.TextView.onKeyDown(TextView.java:5059)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.View.dispatchKeyEvent(View.java:7086)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1892)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1369)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.app.Activity.dispatchKeyEvent(Activity.java:2356)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1819)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3575)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl.deliverKeyEvent(ViewRootImpl.java:3531)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3113)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2930)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.os.Looper.loop(Looper.java:137)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.reflect.Method.invokeNative(Native Method)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at java.lang.reflect.Method.invoke(Method.java:511)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-18 13:57:18.291: E/AndroidRuntime(1280):     at dalvik.system.NativeStart.main(Native Method)
10-18 13:57:18.462: D/dalvikvm(1280): GC_CONCURRENT freed 275K, 4% free 8188K/8519K, paused 46ms+5ms, total 214ms

我認為這是一個內存問題,因為當我在edittext中輸入數字大約30秒至40秒后,它便崩潰了,並且在logcat中一直說“ GC_CONCURRENT釋放了434K,7%釋放了8167K / 8711K,暫停了16ms + 16ms,總計173ms”,並且看起來也很慢。 我也認為這可能只是模擬器問題。

Edit1:問題僅在我刪除時發生。

您可以使用try / catch處理NumberFormatException並在異常情況下顯示Toast。

嘗試將支票更新為:

if(text1.getText().toString().length() == 0)
{
    return;
}

使用條件:-

if(!text1.getText().toString().equalIngorecase(""))
{
       float inputValue = Float.parseFloat(text1.getText().toString());
       text2.setText(String.valueOf(convertFahrenheitToCelsius(inputValue)));
}

您不能將空字符串""解析為Float 將您的代碼(第50行)放入try塊中,並捕獲java.lang.NumberFormatException

更多信息在這里

暫無
暫無

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

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