2012-01-08 15 views
0

私はいくつかの編集テキストフィールドを持つ画面があり、ユーザーがデータを入力するとボタンを押しますこれは計算を行います。 しかし、データを入力せずにボタンを押すだけでクラッシュします。アンドロイド - 私はボタンを押したときにクラッシュしました(edittextフィールドにデータを入力しないと)

私はデータがないときには、メッセージをスローするのが好きだと思っていましたが、どうやってそれを行うのかわかりません!

別の方法がありますか?

ここはこの部分です。これは、計算を行うmass_calcs関数を呼び出します。ここで

public void onClick(View v) { 
     switch (v.getId()){ 
     case R.id.mass_calcs: 
      mass_func(); 
      break; 
     } 

logcatです:

01-08 18:45:25.650: I/jdwp(723): received file descriptor 13 from ADB 
01-08 18:45:25.752: W/System.err(723): Can't dispatch DDM chunk 46454154: no handler defined 
01-08 18:45:25.752: W/System.err(723): Can't dispatch DDM chunk 4d505251: no handler defined 
01-08 18:49:13.350: W/InputMethodManager(723): Ignoring onBind: cur seq=2, given seq=1 
01-08 18:49:14.999: W/KeyCharacterMap(723): No keyboard for id 0 
01-08 18:49:14.999: W/KeyCharacterMap(723): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-08 18:49:15.589: D/AndroidRuntime(723): Shutting down VM 
01-08 18:49:15.589: W/dalvikvm(723): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) 
01-08 18:49:15.599: E/AndroidRuntime(723): Uncaught handler: thread main exiting due to uncaught exception 
01-08 18:49:15.692: E/AndroidRuntime(723): java.lang.NumberFormatException: 
01-08 18:49:15.692: E/AndroidRuntime(723): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:258) 
01-08 18:49:15.692: E/AndroidRuntime(723): at java.lang.Double.parseDouble(Double.java:323) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.wordpress.androiddevgeo.Radiation.number_mass.mass_func(number_mass.java:52) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.wordpress.androiddevgeo.Radiation.number_mass.onClick(number_mass.java:45) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.View.performClick(View.java:2179) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.View.onTouchEvent(View.java:3828) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.widget.TextView.onTouchEvent(TextView.java:6291) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.View.dispatchTouchEvent(View.java:3368) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.app.Activity.dispatchTouchEvent(Activity.java:1993) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.os.Looper.loop(Looper.java:123) 
01-08 18:49:15.692: E/AndroidRuntime(723): at android.app.ActivityThread.main(ActivityThread.java:3948) 
01-08 18:49:15.692: E/AndroidRuntime(723): at java.lang.reflect.Method.invokeNative(Native Method) 
01-08 18:49:15.692: E/AndroidRuntime(723): at java.lang.reflect.Method.invoke(Method.java:521) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
01-08 18:49:15.692: E/AndroidRuntime(723): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
01-08 18:49:15.692: E/AndroidRuntime(723): at dalvik.system.NativeStart.main(Native Method) 
01-08 18:49:15.799: I/dalvikvm(723): threadid=7: reacting to signal 3 
01-08 18:49:16.030: I/dalvikvm(723): Wrote stack trace to '/data/anr/traces.txt' 
01-08 18:49:19.361: I/Process(723): Sending signal. PID: 723 SIG: 9 
01-08 19:15:31.900: D/AndroidRuntime(767): Shutting down VM 
01-08 19:15:31.900: W/dalvikvm(767): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) 
01-08 19:15:31.900: E/AndroidRuntime(767): Uncaught handler: thread main exiting due to uncaught exception 
01-08 19:15:31.954: E/AndroidRuntime(767): java.lang.NumberFormatException: 
01-08 19:15:31.954: E/AndroidRuntime(767): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:258) 
01-08 19:15:31.954: E/AndroidRuntime(767): at java.lang.Double.parseDouble(Double.java:323) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.wordpress.androiddevgeo.Radiation.number_mass.mass_func(number_mass.java:51) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.wordpress.androiddevgeo.Radiation.number_mass.onClick(number_mass.java:45) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.View.performClick(View.java:2179) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.View.onTouchEvent(View.java:3828) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.widget.TextView.onTouchEvent(TextView.java:6291) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.View.dispatchTouchEvent(View.java:3368) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.app.Activity.dispatchTouchEvent(Activity.java:1993) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.os.Looper.loop(Looper.java:123) 
01-08 19:15:31.954: E/AndroidRuntime(767): at android.app.ActivityThread.main(ActivityThread.java:3948) 
01-08 19:15:31.954: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method) 
01-08 19:15:31.954: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:521) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
01-08 19:15:31.954: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
01-08 19:15:31.954: E/AndroidRuntime(767): at dalvik.system.NativeStart.main(Native Method) 
01-08 19:15:32.021: I/dalvikvm(767): threadid=7: reacting to signal 3 
01-08 19:15:32.259: I/dalvikvm(767): Wrote stack trace to '/data/anr/traces.txt' 
01-08 19:15:34.082: I/Process(767): Sending signal. PID: 767 SIG: 9 
01-08 19:16:41.569: W/KeyCharacterMap(774): No keyboard for id 0 
01-08 19:16:41.582: W/KeyCharacterMap(774): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-08 19:16:45.840: D/AndroidRuntime(774): Shutting down VM 
01-08 19:16:45.840: W/dalvikvm(774): threadid=3: thread exiting with uncaught exception (group=0x4000fe70) 
01-08 19:16:45.840: E/AndroidRuntime(774): Uncaught handler: thread main exiting due to uncaught exception 
01-08 19:16:45.911: E/AndroidRuntime(774): java.lang.NumberFormatException: 
01-08 19:16:45.911: E/AndroidRuntime(774): at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:258) 
01-08 19:16:45.911: E/AndroidRuntime(774): at java.lang.Double.parseDouble(Double.java:323) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.wordpress.androiddevgeo.Radiation.number_mass.mass_func(number_mass.java:51) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.wordpress.androiddevgeo.Radiation.number_mass.onClick(number_mass.java:45) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.View.performClick(View.java:2179) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.View.onTouchEvent(View.java:3828) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.widget.TextView.onTouchEvent(TextView.java:6291) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.View.dispatchTouchEvent(View.java:3368) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.app.Activity.dispatchTouchEvent(Activity.java:1993) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.os.Looper.loop(Looper.java:123) 
01-08 19:16:45.911: E/AndroidRuntime(774): at android.app.ActivityThread.main(ActivityThread.java:3948) 
01-08 19:16:45.911: E/AndroidRuntime(774): at java.lang.reflect.Method.invokeNative(Native Method) 
01-08 19:16:45.911: E/AndroidRuntime(774): at java.lang.reflect.Method.invoke(Method.java:521) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
01-08 19:16:45.911: E/AndroidRuntime(774): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
01-08 19:16:45.911: E/AndroidRuntime(774): at dalvik.system.NativeStart.main(Native Method) 
01-08 19:16:45.960: I/dalvikvm(774): threadid=7: reacting to signal 3 
01-08 19:16:46.141: I/dalvikvm(774): Wrote stack trace to '/data/anr/traces.txt' 
01-08 19:16:47.409: I/Process(774): Sending signal. PID: 774 SIG: 9 

mass_calcsクラスは次のとおりです。

getDouble()

、しかしときのnがあるの呼び出し

public class mass_calcs extends Activity { 

    TextView masscalcs; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mass_calcs); 

     masscalcs=(TextView) findViewById(R.id.masscalcs);  
     double res=getIntent().getExtras().getDouble("value"); 

     masscalcs.setText("Amount of mass remaining: "+res+" mg"); 
    } 



} 
+1

logcatや関連コードから例外スタックを投稿してください。そうすれば、正確な答えを得ることができます。 – kosa

+1

私たちは例外を知らない、私たちはメソッドを見ることができません、あなたが期待しているか分からない。 –

+0

答えを更新しました。ありがとうございました! – George

答えて

2

データがない場合は、getDouble()にはdoubleが指定されていないため、アプリケーションがクラッシュすることがあります。あなたはそれを持っていることを

case R.id.mass_calcs: 

     if(isNumeric(masscalcs.getText().toString())) 
     { 
      mass_func(); 
     } 
     else 
     { 
      Toast.makeText(context, "Please provide a number", Toast.LENGTH_SHORT).show(); 
     } 
     break; 
    } 

    public static boolean isNumeric(String str) 
    {  
     try 
     { 
     double d = Double.parseDouble(str); 
     } 
     catch(NumberFormatException nfe) 
     { 
     return false; 
     } 
     return true; 
    } 
+0

: "if(isNumeric(mass_calcs.getText()。toString()))")でmass_calcsを意味するのではなく、 "getTextメソッドがタイプViewに対して未定義です"というエラーが表示されます。私はそこに置く必要がありますか?また、 "Toast.makeText(context ..."コンテキストは変数に解決できません ".I import android.widget.Toast.Anything else ?ありがとうございました! – George

+0

コンテキストを提供できる変数にコンテキストを変更する必要があります。入れ替えるものの悪い例は、 "mass_calcs.this"(またはクラス名が何であれ)でもかまいません。申し訳ありませんが、typcはmasscalcsをあなたのテキストビューに変更しています。それでもなおエラーが発生した場合は、IFに余分な声明が必要と思われる場合は、私たちに知らせてください。 –

+0

私の最後のコメントは明確ではないかもしれません - mass_calcs.getText()。toString() - "mass_calcs"はあなたのクラスです。あなたは、私が "masscalcs"と呼んでいたと思っていた数字を入力するビュー(ボックス)を渡す必要がありますが、再度見て間違っていました。 –

0

you`re正しい番号、それはクラッシュします。正しい番号が入力されたときにだけ呼び出されることを確認してください。

+0

どうすればいいですか?if文を記述しますか?mass_calcsクラスではどうですか?ありがとう! – George

+0

getExtras()はバンドルを返します。 containsKey( "value")メソッドを使用して、doubleが含まれているかどうかを判断します。 – Jens

+0

私は "double res = getIntent()。containsKey(" value ");"しかし、それは正しくありません。それを書く方法は? – George

0

があなたのEditText文字列/編集可能ですので

case R.id.mass_calcs: 
     mass_func(); 
     break; 
    } 

変更も持って

  1. それは編集可能だと、私はあなたが意図で編集可能に保存しているとき、文字列を格納する必要がありeditable.toString();を保存することを変更するには
    Double.parseDouble();を使用することができるとは思いません。
  2. 既に文字列を渡していて、引数がparseDouble()でない場合(null文字列を渡す場合)、例外もスローされます。これを避けるには、EditText文字列をインテントに格納する領域にif-elseを設定し、文字列がnullか何かを持つかどうかを確認する必要があります。
+0

または単にtry ... catchでラップしてください。例外を発生させることなく ""を数値、倍数などに変換することはできません。 –

+0

これはオプションですが、後ではなく早期に失敗する方が良いわけではありませんか?これは処理と数サイクルなどを節約するでしょう。これは単なる意見です。 –

+0

@TonyMaroええので、あなたが何ができるかと言うです:もし(theString.length()== 0)//あなたが望むものは何でも入れ、トースト 他intent.putExtra( "値" のような、Double.parseDouble(theString.trim ()))); - あなたは、それがのEditTextからeditablesグラブボタンを押した後だと、どこでもあなたが望むそれを置くことができます。アプリケーションが変換計算機である場合、処理時間を節約しても差はありません。しかし、あなたが効率を探しているなら、あなたは早くそれを置くことができます。 –

関連する問題