2016-09-13 4 views
0

Я загружаю метод одним нажатием кнопки, но это не занимает время, которое я дал perfrom action.can, кто-нибудь скажет мне, что я делаю неправильно.Как загрузить метод через некоторое время нажатием кнопки?

Это по нажатию кнопки: -

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



       if (VerificationCount < 2) { 
        if(br != null) 
        { 
         br.show(); 
        } 
        checkotp.setText(""); 


        HashMap<String, String> formData = new HashMap<>(); 
        formData.put("Phone", Phone); 
        webServiceHandler.requestToServer((getResources().getString(R.string.api_end_point)) + "SendOTPForgetPassword", WebService.ADDLIST, formData, true); 


        VerificationCount++; 
        timer.start(); 
        mTvCountDown.setText("00:00:30"); 
        resand_otp_new.setVisibility(View.INVISIBLE); 

        verifyResendOtp(); 


       } else { 
        Toast.makeText(v.getContext(), "You Have Used Maximum Chances of OTP !", Toast.LENGTH_SHORT).show(); 
       } 


      } 
     }); 

загружает метод verifyResendOtp() для 30 second.but это не займет время, выполнить немедленно.

Это мой метод: -

private void verifyResendOtp() { 

    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (generalUtilities.isConnected()) { 
       SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(IncominMsg.KEY_PREFERNCE, MODE_PRIVATE); 
       otpnumber = sharedPreferences.getString(IncominMsg.KEY_OTP, ""); 
       Log.e("otpnumberverifiy....", otpnumber); 

       checkotp.setText(otpnumber); 

       HashMap<String, String> formData = new HashMap<>(); 
       formData.put("Phone", Phone); 
       formData.put("OTP", checkotp.getText().toString().trim()); 
       webServiceHandler.requestToServer((getResources().getString(R.string.api_end_point)) + "CheckOTPForgetPassword", WebService.FORGET_PASSWORD, formData, true); 


      } else { 

       generalUtilities.showAlertDialog("HEY USER", "Please Connect To the Internet", getApplicationContext()); 
      } 

     } 
    }, 30000); 

} 
+0

Одна вещь, чтобы отметить здесь, что каждый щелчок кнопки создаст новый экземпляр 'Handler' и планировать замедленное действие, следовательно, это подход немного испорчен. – Shaishav

ответ

0

Я думаю, что есть дизайн ошибка здесь, а не реализации обработчика внутри метода, то почему бы вам не создать обработчик внутри onClickListener и сделать реализовать работоспособным и вызовите метод оттуда.

Что-то, как показано ниже

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
     public void run() { 
      verifyResendOtp(); 
     } 
}, 30000); 

И ваш рефакторинга метод

private void verifyResendOtp() { 
    if (generalUtilities.isConnected()) { 
      SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(IncominMsg.KEY_PREFERNCE, MODE_PRIVATE); 
      otpnumber = sharedPreferences.getString(IncominMsg.KEY_OTP, ""); 
      Log.e("otpnumberverifiy....", otpnumber); 

      checkotp.setText(otpnumber); 

      HashMap<String, String> formData = new HashMap<>(); 
      formData.put("Phone", Phone); 
      formData.put("OTP", checkotp.getText().toString().trim()); 
      webServiceHandler.requestToServer((getResources().getString(R.string.api_end_point)) + "CheckOTPForgetPassword", WebService.FORGET_PASSWORD, formData, true); 


     } else { 

      generalUtilities.showAlertDialog("HEY USER", "Please Connect To the Internet", getApplicationContext()); 
     } 
} 
+0

Как это отличается от того, что делает OP в настоящее время? – Shaishav