Search code examples
if-statementandroid-asynctaskbooleanorder-of-execution

Programe Not Executing in Correct Order in Android Studio


I want to check whether the email id entered by user is unique or not so for that initially I have my variable Boolean valid = false;. On clicking a button i am taking the email id entered and checking it for valid email id expression using regular expression and then i am using an asyntask to check its uniqueness. Code in my onclicklistner is

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

Here what problem i am facing is, for first time when i am entering an email which is unique and clicks the button, the Validate() asynctask checks and sets the valid variable to true, but it doesn't goes to next activity GamesFragment because i have declared valid = false initially. Now when i again click the button, then it goes to next activity as the valid variable is set to true because of previous click. Now My Validate() asynctask is

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

Please help i am not getting why this is happening.


Solution

  • Create function to check validation.

    private boolean function validate(String emailid){
    
    if (emailid.matches(regexp) && emailid.length() > 0) {
    return true;
    }
    
    
    return false;
    
    }
    

    use that function to decide event

    if(validate(emailid)){ // if function return true then email is valid and good to go.
    
     new Validate().execute();
    
    
    }
    

    For second condition you have to check it in your async task onPostExecute() that is 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);
    

    } }