2016-08-22 4 views
1

intdelayを編集テキストから値を取り出し、以下のように整数に変換して更新しようとしています。 intdelayの値。トライキャッチを使用して整数値を更新し、トーストを使用して表示

public static int intdelay=1000; 

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

    delayedttxt=(EditText)findViewById(R.id.delayedttxt); 
    String delay=delayedttxt.getText().toString();  //this will get a string 
    try{ 
     int intdelay = Integer.parseInt(delay); 
    }catch(NumberFormatException ex){ // handle your exception 
    } 

    Button btn=(Button)findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      flashLight.switchFlash(); 
      Toast.makeText(MainActivity.this,"your integer is " + intdelay , Toast.LENGTH_LONG).show(); 
     } 
    }); 

ただし、intdelay値は更新されません。 どうすれば解決できますか?

注:アプリがクラッシュするため、try-catch構造を使用する必要があります。

私はのtry-catchを削除すると、 コードは以下のようになる:あなたは、

08-22 16:13:05.866 17636-17636/de.nocnoc.clean.cleanlight I/RequestQueue: Repeating capture request set. 
08-22 16:13:05.876 17636-17790/de.nocnoc.clean.cleanlight W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value 
08-22 16:13:05.876 17636-17790/de.nocnoc.clean.cleanlight W/LegacyRequestMapper: Only received metering rectangles with weight 0. 
08-22 16:13:06.866 17636-17636/de.nocnoc.clean.cleanlight I/RequestQueue: Repeating capture request cancelled. 
08-22 16:13:06.866 17636-17636/de.nocnoc.clean.cleanlight I/RequestQueue: Repeating capture request set. 
08-22 16:13:06.894 17636-17790/de.nocnoc.clean.cleanlight W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value 
08-22 16:13:06.894 17636-17790/de.nocnoc.clean.cleanlight W/LegacyRequestMapper: Only received metering rectangles with weight 0. 
08-22 16:19:51.367 19348-19348/de.nocnoc.clean.cleanlight W/System: ClassLoader referenced unknown path: /data/app/de.nocnoc.clean.cleanlight-2/lib/arm 
08-22 16:19:51.404 19348-19348/de.nocnoc.clean.cleanlight D/AndroidRuntime: Shutting down VM 
08-22 16:19:51.414 19348-19348/de.nocnoc.clean.cleanlight E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: de.nocnoc.clean.cleanlight, PID: 19348 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{de.nocnoc.clean.cleanlight/de.nocnoc.clean.flashlight.MainActivity}: java.lang.NumberFormatException: Invalid int: "" 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524) 
                       at android.app.ActivityThread.access$900(ActivityThread.java:154) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:234) 
                       at android.app.ActivityThread.main(ActivityThread.java:5526) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                      Caused by: java.lang.NumberFormatException: Invalid int: "" 
                       at java.lang.Integer.invalidInt(Integer.java:138) 
                       at java.lang.Integer.parseInt(Integer.java:358) 
                       at java.lang.Integer.parseInt(Integer.java:334) 
                       at de.nocnoc.clean.flashlight.MainActivity.onCreate(MainActivity.java:32) 
                       at android.app.Activity.performCreate(Activity.java:6285) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524)  
                       at android.app.ActivityThread.access$900(ActivityThread.java:154)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:234)  
                       at android.app.ActivityThread.main(ActivityThread.java:5526)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
08-22 16:19:53.050 19348-19348/de.nocnoc.clean.cleanlight I/Process: Sending signal. PID: 19348 SIG: 9 
+1

あなたはクラッシュのlogcatを共有できますか? – SripadRaj

+1

アプリがtry-catchなしでクラッシュするという事実は、遅延文字列を解析してintdelayにする行で何かが間違っていることを伝えます。これは問題です。文字列を解析するときに例外がスローされるため、あなたのintdelay値は更新されません。 –

+1

私はtry-crash以外のコードを共有しました.logcat – Ans

答えて

1

をあなただけonCreateintdelayを得ている:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     delayedttxt=(EditText)findViewById(R.id.delayedttxt); 
     String delay=delayedttxt.getText().toString(); 
     final int intdelay = Integer.parseInt(delay); 

     Button btn=(Button)findViewById(R.id.btn); 
     btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      flashLight.switchFlash(); 
      Toast.makeText(MainActivity.this,"your integer is " + intdelay ,Toast.LENGTH_LONG).show(); 
     } 
    }); 

とクラッシュ後logcatを、次のようトーストを表示する前に毎回編集テキストの値を読み取る必要があります。他の方法ではonClickListenerの内部にあります。最初に編集テキストはそれに値を持たないので、Integer.parseIntコールはthrowNumberFormatExceptionとなります。

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     String delay = delayedttxt.getText().toString(); 
     int intdelay = 0; 
     try{ 
      intdelay = Integer.parseInt(delay); 
     } catch(NumberFormatException ex){ 
      e.printStackTrace();// Never swallow exception 
     } 
     flashLight.switchFlash(); 
     Toast.makeText("Initial Delay : " + intdelay , Toast.LENGTH_LONG).show(); 
    } 
}); 
+0

は 'e.printStackTrace();'を削除した後に完全に動作しました。 – Ans

+0

@Ansはい。スタックトレースを印刷したくない場合は、例外を記録することもできます。 'NumberFormatException'は実行時例外です。もし' String delay'が数字に解析できないものではないと確信すれば、try-catchブロックをうれしく削除することができます。 –

0

edittextに値を設定する前に、遅延が初期化されていることが原因です。このように、onclickのメソッド内でこのライン

String delay=delayedttxt.getText().toString(); 

を移動 -

Button btn=(Button)findViewById(R.id.btn); 
btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    String delay=delayedttxt.getText().toString(); 
     flashLight.switchFlash(); 
     Toast.makeText(MainActivity.this,"your integer is " + intdelay , Toast.LENGTH_LONG).show(); 
    } 
}); 

はその後、再び

0

あなたはそれがNumberFormatExceptionがを投げている onclicklistener内部

String delay=delayedttxt.getText().toString();  //this will get a string 
try{ 
    int intdelay = Integer.parseInt(delay); 
}catch(NumberFormatException ex){ // handle your exception 
} 

を置く必要がありますしてみてくださいgetTeから返された空の文字列を解析しているためですxtメソッドと それを実行した後にtry catchを必要としません

+0

不正な形式の開始 – Ans

+0

これをonclickメソッドに入れましたか? –

関連する問題