2016-07-28 6 views
0

ユーザーが入力した電子メールIDが一意であるかどうかをチェックしたいのですが、最初は変数がBoolean valid = false;です。ボタンをクリックすると、入力された電子メールIDを取得し、正規表現を使用して有効な電子メール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チェックをクリックするとtrueにvalid変数を設定し、電子メールを入力していたときに初めて、あります私はvalid = falseを最初に宣言しているので、次のアクティビティGamesFragmentには向かない。ここでもう一度ボタンをクリックすると、前のクリックのために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

検証は、あなたの同じクラスの右にありますか? @AdnanMomin – KDeogharkar

+0

yes @KDeogharkar – knownUnknown

+0

validateはmy ** inner class ** – knownUnknown

答えて

0

検証を確認する機能を作成します。

private boolean function validate(String emailid){ 

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


return false; 

} 
あなたが検証(あるあなたの非同期タスク onPostExecute()でそれをチェックする必要が第二の条件のためにイベント

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

new Validate().execute(); 


} 

を決定するために機能

使用)。

@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を使って電子メールIDをチェックすることができますが、問題は電子メールIDの一意性をチェックすることです。私のコードで2番目のif文を意味します。また、私のasynctaskで私はhttp要求をしています。 – knownUnknown

+0

あなたはそれが既に利用可能であるかどうかを言うことを意味しますか? – KDeogharkar

+0

はい、あなたは正しいです – knownUnknown

関連する問題