2016-07-28 2 views
0

Я хочу проверить, является ли идентификатор электронной почты, введенный пользователем уникальным или нет, для этого изначально у меня есть моя переменная Boolean valid = false;. При нажатии кнопки я беру введенный идентификатор электронной почты и проверяю его на действительное выражение id электронной почты, используя регулярное выражение, а затем я использую asyntask для проверки его уникальности. Код в моем onclicklistner являетсяПрограмма не выполняется в правильном порядке в Android Studio

if (emailid.matches(regexp) && emailid.length() > 0) { new Validate().execute(); Toast.makeText(getApplicationContext(), valid.toString(), Toast.LENGTH_LONG).show(); if (valid) { data.putString("eid", eid); data.putString("firstname", firstname); data.putString("lastname", lastname); data.putString("emailid", emailid); Intent i = new Intent(getApplicationContext(), GamesFragment.class); startActivity(i); } else { Toast.makeText(getApplicationContext(), "Email Address Already Exist", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(getApplicationContext(), "Check Your Email Address", Toast.LENGTH_LONG).show(); }

Вот какая проблема я облицовкой, в первый раз, когда я вхожу в электронную почту, которая является уникальной и нажимает на кнопку, то Validate() AsyncTask проверяет и устанавливает переменную valid истина , но он не переходит к следующему действию GamesFragment, потому что я сначала объявил valid = false. Теперь, когда я снова нажимаю кнопку, он переходит к следующему действию, так как переменная valid имеет значение true из-за предыдущего щелчка. Теперь мой Validate() AsyncTask является

private class Validate extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      ArrayList<NameValuePair> emailId = new ArrayList<NameValuePair>(); 
      emailId.add(new BasicNameValuePair("email", emailid)); 

      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("url/validate.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(emailId)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       iss = entity.getContent(); 

      } catch(Exception e) { 
       Log.e("pass 1", "Connection Error"); 
       e.printStackTrace(); 
      } 

      try { 
       BufferedReader reader = new BufferedReader 
         (new InputStreamReader(iss,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       while ((line = reader.readLine()) != null) 
        sb.append(line + "\n"); 
       iss.close(); 
       result = sb.toString(); 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 

      try { 
       JSONObject json_data = new JSONObject(result); 
       code=(json_data.getInt("code")); 

       if(code == 1) 
        valid = true; 
       else 
        valid = false; 
       Log.e("pass 3", "valid "+valid); 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 


      return null; 
     } 
    } 

Пожалуйста, помогите я не получаю, почему это происходит.

+0

Validate в вашем же классе права? @AdnanMomin – KDeogharkar

+0

yes @KDeogharkar – knownUnknown

+0

validate это мой ** внутренний класс ** – knownUnknown

ответ

0

Создать функцию проверки валидации.

private boolean function validate(String emailid){ 

if (emailid.matches(regexp) && emailid.length() > 0) { 
return true; 
} 


return false; 

} 

использование этой функции, чтобы решить событие

if(validate(emailid)){ // if function return true then email is valid and good to go. 

new Validate().execute(); 


} 

Для второго условия вы должны проверить его в асинхронном задаче onPostExecute(), который Validate();

@Override 
    protected void onPostExecute(Object o) { 

     super.onPostExecute(o); 
     if(code == 1){ 

    // check if response is valid than 
Intent i = new Intent(getApplicationContext(), GamesFragment.class); 
         startActivity(i); 

}}

+0

Я могу проверить идентификатор электронной почты с помощью regexp, но проблема заключается в проверке уникальности идентификатора электронной почты. Я имею в виду второй оператор if в моем коде. Также в моей asynctask я делаю http-запросы. – knownUnknown

+0

Вы хотите сказать, уже ли он доступен или нет? – KDeogharkar

+0

да, вы правы – knownUnknown

Смежные вопросы