2016-09-13 1 views
0

ボタンをクリックするだけでメソッドが読み込まれますが、perfromアクションに与えられた時間はかかりません。誰かが何をしているのか教えてください。ボタンをクリックしてしばらくしてメソッドを読み込む方法はありますか?

これは、ボタンのクリックである: - それはそれは即座に実行時間がかかることはありませんsecond.but私は30のための方法verifyResendOtpを()ロード

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(); 
       } 


      } 
     }); 

これは私の方法である: - 私はここではなく、あなたがonClickListener内部ハンドラを作成して、実行可能を実装しないでくださいなぜ法、内部のハンドラを実装するよりも、設計ミスがあると思い

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

そこからメソッドを呼び出します。

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

関連する問題