2016-11-05 4 views
0

Stringintegerに変換しようとしています。 Integer.parseInt()が以前に動作しましたが、今は失敗しています。ここでは失敗していますint INTERVAL= (60000 * Integer.parseInt(preferenceTime));私はタイマーをスケジュールするときに時間を動的に指定しようとしています。
は、それが数を解析するために失敗した場合は、文字列をintのサービスに変換する

public class Service extends Service { 

    public SharedPreferences settings; 


    private Handler HandleIt = new Handler(); 
    private Timer timer = new Timer(); 
    boolean timeout = false; 
    //private PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); 





    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    ////////////////////////////////////////////// 

    class TimeDisplayTimerTask extends TimerTask { 



     @Override 
     public void run() { 
      HandleIt.post(new Runnable(){ 
       public void run(){ 

        //SharedPreferences 
        settings = getSharedPreferences("timer_preference", MODE_PRIVATE); 
        String preferenceTime = settings.getString("timer_preference", ""); 

        // int INTERVAL= (60000 * Integer.parseInt(preferenceTime)); 


        Toast.makeText(getApplicationContext(), TextonScreen(), Toast.LENGTH_SHORT).show(); 

        //get screen light up 
        PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); 
        boolean isScreenOn = pm.isScreenOn(); 
        if(isScreenOn==false) { 
         pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My Tag"); 
        } 
        // make a new intent and start it with flag and send an sms 
        Intent launch = new Intent(getBaseContext(), SMS.class); 
        launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(launch); 
       } 
      }); 
     } 


    } 

    private String TextonScreen() 
    { 
     timeout = true; 
     return "it is running"; 


    } 
    boolean isTimeout() 
    { 
     return timeout; 
    } 
    @Override 
    public void onCreate() { 

     // TODO Auto-generated method stub 
     super.onCreate(); 
     Toast.makeText(this, "Service is created", Toast.LENGTH_SHORT).show(); 



    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 


     SharedPreferences settings = getSharedPreferences(getPackageName() + "timer_preference", MODE_PRIVATE); 
     String preferenceTime = settings.getString("timer_preference", ""); 
     int INTERVAL= (60000 * Integer.parseInt(preferenceTime)); 



     // TODO Auto-generated method stub 
     // Display the Toast Message 
     Toast.makeText(this, "Start Service", Toast.LENGTH_SHORT).show(); 
     // Execute an action after period time 
     //comes from the TimeDisplayTimerTask class 
     timer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, INTERVAL); 


     return super.onStartCommand(intent, flags, startId); 
    } 


    @Override 
    public void onDestroy() { 
     // Display the Toast Message 
     Toast.makeText(this, "Stop Service", Toast.LENGTH_SHORT).show(); 
     if (timer != null) { 
      timer.cancel(); 
     } 
     super.onDestroy(); 
    } 

} 
+1

あなたはどういう意味ですか?間違いはありますか?予期せぬ結果ですか? – TDG

+1

失敗するとどういう意味ですか?それは例外を投げていますか? –

+0

私はApkをビルドして電話にインストールします。それを起動しようとします。残念ながら、アプリケーションは停止しています。 integer.parseint()をコメントアウトするとうまく動作します。 –

答えて

0

あなたはintとしてパーサーしたいので失敗します! "これを試してみてください :

String preferenceTime = settings.getString("timer_preference", "0"); 
int INTERVAL= (60000 * Integer.parseInt(preferenceTime)); 

0は、私はそれには何も設定しない場合は、0をデフォルト値を返すことを意味します。

なぜあなたはintとして格納していませんか?私はこれを意味する:

int preferenceTime = settings.getInteger("timer_preference", 0); 
int INTERVAL= (60000 * preferenceTime); 
+0

私がintとして格納していないのは、Listpreferenceだからです。それは私に誤りを与えていた。とても感謝してくれました。 –

0

、それはNumberFormatExceptionががスローされます感謝します。デフォルトを供給(またはあなたはそれがfalseを返す#isPresentを経由して失敗した知っている)ことができます呼び出し、その後

public static Optional<Integer> parseInt(String s) { 
    try { 
     return Optional.of(Integer.parseInt(s)); 
    } catch (NumberFormatException ex) { 
     return Optional.empty(); 
    } 
} 

:私は通常ので、私は、デフォルト値を供給することができますOptionalInteger#parseIntの呼び出しをラップしたいと

int value = parseInt(preferenceTime).orElse(/* some default integer */); 
+0

Java 8でのみ動作します。 – TDG

+0

Yupですが、簡単に引数を追加してデフォルト値を渡すことができます。要点は、失敗した解析が 'NumberFormatException'をスローすることです – Rogue

関連する問題