2016-04-18 13 views
-1

私は1時間の時間を制限するカウントダウンタイマーが必要なプロジェクトをやっています。 これをコード化しましたが、カウントダウンタイマーはアクティビティをリフレッシュするたびに開始されます。 どうすればよいですか?ここでバックグラウンドでカウントダウンタイマーを実行するには

は私のコードは

new CountDownTimer(3600000, 1000) { 
        @Override 
        public void onTick(long millisUntilFinished) { 
         long millis = millisUntilFinished; 
         mTimer.setText("" + String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), 
           TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), 
           TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)))); 
        } 
        @Override 
        public void onFinish() { 
         mTimer.setText(""); 
         unlock(); 
         mStatus.setTextColor(Color.parseColor("#f9d540")); 
        } 
       }.start(); 

でいただきありがとうございます:)

これらは、私の活動のコードです。私は(ちょうどのみ//が待っている)AsyncTaskでそれを行うことを試みた

String ipParse; 
long CountTimer; 
TextView mName,mUsername,mLicense,mLot,mStatus, mDate, mPayment, mTel,mTimer,mconfirm; 
ImageView imageView,Ask; 
Button unlock, layout, logout; 
private String login_name, user_license, lot_lot; 
private IPManager ipManager; 
private LoginManager loginManager; 
AlertDialog alertDialog; 

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

    loginManager = new LoginManager(this); 
    ipManager = new IPManager(this); 
    ipParse = ipManager.Read_ip(); 


    login_name = getIntent().getStringExtra("username"); 
    user_license = getIntent().getStringExtra("license"); 
    lot_lot = getIntent().getStringExtra("lot"); 


    mName  = (TextView) findViewById(R.id.name); 
    mUsername = (TextView) findViewById(R.id.user_username); 
    mLicense = (TextView) findViewById(R.id.license_user); 
    mLot  = (TextView) findViewById(R.id.yourlot); 
    mStatus = (TextView) findViewById(R.id.status_parking); 
    mDate  = (TextView) findViewById(R.id.date); 
    mPayment = (TextView) findViewById(R.id.payment); 
    mTel  = (TextView) findViewById(R.id.tel); 
    mTimer = (TextView) findViewById(R.id.Timer); 
    mconfirm = (TextView) findViewById(R.id.confirmation); 

    imageView = (ImageView) findViewById(R.id.pic_parking); 
    Ask  = (ImageView) findViewById(R.id.pic_Ask); 

    unlock = (Button) findViewById(R.id.button_unlock); 
    layout = (Button) findViewById(R.id.layout_building); 
    logout = (Button) findViewById(R.id.log_out); 

    unlock.setVisibility(View.GONE); 



    PostFunction postM =new PostFunction(); 

    //Check Status 
    try { 
     String resp = postM.postCheck2a(ipParse, user_license, lot_lot); 
     JSONObject object = new JSONObject(); 
     try { 
      object = new JSONObject(resp); 
      int status = object.getInt("status"); 
      int status_2a = object.getInt("status_2a"); 



      //waiting 
      if (status == 0 && status_2a == 1){ 

       unlock.setVisibility(View.VISIBLE); 


       Ask.setVisibility(View.GONE); 

       mconfirm.setText("time for confirmation"); 
       mStatus.setTextColor(Color.parseColor("#20b2aa")); 


       new UpdateCountdownTask().execute(); 



      } 

      //wrong lot!!!! 
      else if (status == 0 && status_2a == 2){ 

       unlock.setVisibility(View.VISIBLE); 
       Ask.setVisibility(View.GONE); 

       alertDialog = new AlertDialog.Builder(this).create(); 
       alertDialog.setTitle("          Smart Parking"); 
       alertDialog.setMessage("    Wrong lot!! please go to your lot...."); 
       alertDialog.show(); 
       TextView textView = (TextView) alertDialog.findViewById(android.R.id.message); 
       textView.setTextSize(25); 
       textView.setTextColor(Color.RED); 
       mStatus.setTextColor(Color.RED); 

       Ask.setVisibility(View.GONE); 



      } 


      //Parking 
      else if (status == 0 && status_2a == 3){ 

       unlock.setVisibility(View.VISIBLE); 
       Ask.setVisibility(View.GONE); 

       mStatus.setTextColor(Color.parseColor("#0dce5e")); 
      } 


      // getting out 
      else if (status == 0 && status_2a == 4){ 

       mStatus.setTextColor(Color.parseColor("#f9d540")); 

      } 

      else if (status == 1) { 
       Toast.makeText(MainActivity.this, "Sorry the connection failed......" , Toast.LENGTH_LONG).show(); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 





    //show User info 
    try { 
     String resp = postM.postMain(ipParse,login_name); 
     JSONObject object = new JSONObject(); 
     try { 
      object = new JSONObject(resp); 
      int status = object.getInt("status"); 
      if (status == 0) { 

       mName.setText(object.getString ("name")); 
       mUsername.setText(object.getString("username")); 
       mLicense.setText(object.getString("license")); 
       mLot.setText(object.getString("lot")); 
       mStatus.setText(object.getString("user_status")); 
       mDate.setText(object.getString("date")); 
       mPayment.setText(object.getString("payment")); 
       mTel.setText(object.getString("tel")); 


      } else if (status == 1) { 
       Toast.makeText(MainActivity.this, "Sorry something wrong..." , Toast.LENGTH_LONG).show(); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 





    imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = getIntent(); 
      finish(); 
      startActivity(intent); 

     } 

    }); 

    Ask.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, AskFloor.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.putExtra("username", login_name); 
      intent.putExtra("license", user_license); 
      intent.putExtra("lot", lot_lot); 
      startActivity(intent); 
     } 

    }); 



    layout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, Layout.class); 
      startActivity(intent); 

     } 

    }); 

    logout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      loginManager.remove_ExistLogin(); 
      Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
      finish(); 

     } 

    }); 




    unlock.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      unlock(); 

     } 
    }); 


} 


public void unlock(){ 
    PostFunction postM =new PostFunction(); 
    try { 

     String resp = postM.postUnlock(ipParse ,login_name, user_license); 
     JSONObject object = new JSONObject(); 
     try { 
      object = new JSONObject(resp); 
      int status = object.getInt("status"); 


      if (status == 0) { 

       Toast.makeText(MainActivity.this, "UNLOCKED! thank you for coming......", Toast.LENGTH_LONG).show(); 
       Intent intent = getIntent(); 
       startActivity(intent); 
       finish(); 


      } else if (status == 1) { 
       Toast.makeText(MainActivity.this, "UNLOCK FAILED...", Toast.LENGTH_LONG).show(); 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

private class UpdateCountdownTask extends AsyncTask<Long, Long, Void> { 
    @Override 
    protected Void doInBackground(Long... millisUntilFinished) { 
     CountDownTimer myCounter = new CountDownTimer(3600000, 1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       publishProgress(millisUntilFinished); 
      } 
      @Override 
      public void onFinish() { 
       mTimer.setText(""); 
       unlock(); 
       mStatus.setTextColor(Color.parseColor("#f9d540")); 
      } 
     }; 
     myCounter.start(); 
     return null; 
    } 
    @Override 
    protected void onProgressUpdate(Long... millisUntilFinished) { 
     super.onProgressUpdate(millisUntilFinished); 
     long millis = millisUntilFinished[0]; 
     mTimer.setText("" + String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), 
       TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), 
       TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)))); 
    } 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     mTimer.setText(""); 
    } 
} 


} 
+0

BaseActivity/BaseFragmentでのみ時間を初期化し、リフレッシュ可能なアクティビティでは初期化しないでください。 タイマーの実行の有無を設定し、アプリの再起動時にチェックを行うSharedPreferenceがあります。 – TejjD

+0

あなたのアクティビティコードを投稿 –

答えて

0

カウントダウンタイマーの作成:それはあなたの活動の負荷として開始されませんようにと再び 使用静的変数を:

static long v1=60000; 
static long v2=1000; 
    new CountDownTimer(v1, v2) { 
     public void onTick(long millisUntilFinished) { 
      /*for one second*/ 
      textViewFacebook.setText("seconds remaining: " + millisUntilFinished/v2); 
      //here you can have your logic to set text to edittext 
     } 
     public void onFinish() { 
      textViewFacebook.setText("done!"); 
     } 
    }.start(); 

このコードをAsyncTaskバックグラウンドイベントの中に入れて、バックグラウンドで実行してください。

+0

このコードをメインアクティビティまたは新しいクラスに入れる必要がありますか?あなたは何をお勧めしますか? ありがとうございます –

+0

@PatiponLeelaapiwatそれは、あなたの行動に入れるか、別のクラスを作成することによって、あなたが従うコーディングスタンダードに依存します。そのようなAsyncTaskのために私の側から別のクラスとしてより最適化された方法です。 –

関連する問題