2016-09-13 25 views
0

我點擊按鈕加載方法,但它不需要我給予perfrom action的時間。任何人都可以告訴我我做錯了什麼。如何在點擊按鈕後的一段時間加載方法?

這是按鈕的點擊: -

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內部處理程序,並實現Runnable並從那裏調用該方法。

類似下面

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

相關問題