2013-03-16 79 views
0

我剛剛開始在Android中編碼。 我試圖創建一個計算兩個數字總和的應用程序。 即使在這個簡單的程序中也會發生錯誤。 應用程序顯示: 不幸的是,在仿真器中運行時,application_name已停止。Android_Beginner級別的計算器

package com.example.first; 

import org.w3c.dom.Text; 


import android.R.string; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity implements android.view.View.OnClickListener 
{ 
    Button buttonSum,buttonSumOne; 
    EditText textOne,textTwo; 
    TextView textSum; 
    float a,b,sum; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     buttonSum=(Button)findViewById(R.id.button1); 
     buttonSum.setOnClickListener(this); 
     textOne=(EditText)findViewById(R.id.editText1); 
     textTwo=(EditText)findViewById(R.id.editText2); 
     textSum=(TextView)findViewById(R.id.textSum); 
     a=Float.parseFloat(textOne.getText().toString()); 
     a=Float.valueOf(textOne.getText().toString()); 
     b=Float.parseFloat(textTwo.getText().toString()); 
     sum=a+b; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if(R.id.button1==v.getId())   
      textSum.setText(String.valueOf(sum)); 

    } 


} 

的logcat:

03-16 07:08:16.297: W/Trace(791): Unexpected value from nativeGetEnabledTags: 0 
03-16 07:08:16.316: W/Trace(791): Unexpected value from nativeGetEnabledTags: 0 
03-16 07:08:18.496: D/AndroidRuntime(791): Shutting down VM 
03-16 07:08:18.496: W/dalvikvm(791): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 
03-16 07:08:18.536: E/AndroidRuntime(791): FATAL EXCEPTION: main 
03-16 07:08:18.536: E/AndroidRuntime(791): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.first/com.example.first.MainActivity}: java.lang.NumberFormatException: Invalid float: "" 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.os.Looper.loop(Looper.java:137) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread.main(ActivityThread.java:5039) 
03-16 07:08:18.536: E/AndroidRuntime(791): at java.lang.reflect.Method.invokeNative(Native Method) 
03-16 07:08:18.536: E/AndroidRuntime(791): at java.lang.reflect.Method.invoke(Method.java:511) 
03-16 07:08:18.536: E/AndroidRuntime(791): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-16 07:08:18.536: E/AndroidRuntime(791): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-16 07:08:18.536: E/AndroidRuntime(791): at dalvik.system.NativeStart.main(Native Method) 
03-16 07:08:18.536: E/AndroidRuntime(791): Caused by: java.lang.NumberFormatException: Invalid float: "" 
03-16 07:08:18.536: E/AndroidRuntime(791): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
03-16 07:08:18.536: E/AndroidRuntime(791): at java.lang.StringToReal.parseFloat(StringToReal.java:289) 
03-16 07:08:18.536: E/AndroidRuntime(791): at java.lang.Float.parseFloat(Float.java:300) 
03-16 07:08:18.536: E/AndroidRuntime(791): at com.example.first.MainActivity.onCreate(MainActivity.java:33) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.Activity.performCreate(Activity.java:5104) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
03-16 07:08:18.536: E/AndroidRuntime(791): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
03-16 07:08:18.536: E/AndroidRuntime(791): ... 11 more 
03-16 07:08:52.026: I/Process(791): Sending signal. PID: 791 SIG: 9 
+0

logcat說什麼? – 2013-03-16 07:14:20

+0

在此處貼上你的錯誤 – 2013-03-16 07:14:29

+0

感謝您的回覆Mr.Raghav Sood。 – 2013-03-16 07:16:08

回答

0

你得到的錯誤是:

Caused by: java.lang.NumberFormatException: Invalid float: "" 

從下面這行代碼:

at com.example.first.MainActivity.onCreate(MainActivity.java:33) 

其中有下面的代碼:

a=Float.parseFloat(textOne.getText().toString()); 

你的錯誤是,您正嘗試訪問的內容文本域中的onCreate()方法。當要創建活動時會調用此方法,因此用戶尚未有機會與其交互,因此該文本字段的內容爲空。

您應該移動該行代碼以及獲取textTwo值的下幾行代碼,將字符串解析爲float並對onClick()方法執行計算。該方法將在用戶點擊按鈕時執行,之後他有機會在文本字段中輸入一些實際值。

請注意,您仍然必須從解析中捕獲異常,因爲用戶可能會在這些字段中鍵入一些垃圾,而不是實際的數字。最簡單的方法是將try { .. } catch (Exception ex) {}放在解析行的周圍,這基本上會吞噬任何異常。當然,這仍然會運行虛假計算,並向用戶顯示一些不正確的答案。更好的用戶體驗將會在這種情況發生時向用戶顯示一些很好的錯誤信息,並解釋他們做錯了什麼。儘管如此,我會把它作爲一個練習。

1

你得到異常,因爲你是從編輯文本上創建方法和當時的取值都編輯文本是empty..try在獲取方法的onClick價值..

試試這個:

public class MainActivity extends Activity implements android.view.View.OnClickListener 
    { 
     Button buttonSum,buttonSumOne; 
     EditText textOne,textTwo; 
     TextView textSum; 
     float a,b,sum; 
     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      buttonSum=(Button)findViewById(R.id.button1); 
      buttonSum.setOnClickListener(this); 
      textOne=(EditText)findViewById(R.id.editText1); 
      textTwo=(EditText)findViewById(R.id.editText2); 
      textSum=(TextView)findViewById(R.id.textSum); 


     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) 
     { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.activity_main, menu); 
      return true; 
     } 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(R.id.button1==v.getId()) {  
      a=Float.parseFloat(textOne.getText().toString());   
      b=Float.parseFloat(textTwo.getText().toString()); 
       sum=a+b; 
       textSum.setText(String.valueOf(""+sum)); 
    } 
     } 


    } 
+0

-1。你甚至沒有解釋你改變了什麼,更不用說爲什麼。 OP最多隻會留下一些複製和粘貼代碼,與他們來到這裏時相比,處於一個更好的位置。回答不好。 – Simon 2013-03-16 07:19:44

+0

是的,它的工作原理。 謝謝Mr.Karan_rana。 – 2013-03-16 07:22:26

+0

@Simon我的壞...但現在我編輯了我的答案 – 2013-03-16 07:22:30

0

試試這個

a= Float.valueOf(yourEdittext.getText().toString()); 

String s = yourEdittext.getText().toString(); 
Float f= Float.parseFloat(s); 

和增值到您的字符串不會轉換零值浮動。

a="20.0" 
b="22.0" 

這樣的事情。

第一次您的編輯文本不包含該值。因此它不會找到任何要轉換的東西。
你的錯誤解釋了一切。

Caused by: java.lang.NumberFormatException: Invalid float: "" 

爲您的edittext提供值。

yourEditText.setText("22.0");