title: android input validation not working as expected
body: <p>I am trying to perform simple form validation whereby I use EditText.setError() to notify the user of the wrong input or blank field. Unfortunately, when I do that it only shows error when I click on the field again after incomplete form submission. This is weird because I want it to show as soon as I click button and form incomplete.</p>
  
  <p>I believe it has something to do with the placement of the code that does the validation? Following is my code:</p>
  
  <pre><code>public class AddDiscountActivity extends Activity implements OnItemSelectedListener{
  
      String shopCategory;
      Spinner spinner;
  
      String shopName;
      String shopCity;
      String shopLocation;
      String discountRate;
      String discountDuration;
  
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.adddiscount_activity);
           spinner = (Spinner) findViewById(R.id.categoriesSpinner);
          // Create an ArrayAdapter using the string array and a default spinner layout
          ArrayAdapter&lt;CharSequence&gt; adapter = ArrayAdapter.createFromResource(this,
                  R.array.categoriesArray, android.R.layout.simple_spinner_item);
          // Specify the layout to use when the list of choices appears
          adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          // Apply the adapter to the spinner
          spinner.setAdapter(adapter);
          spinner.setOnItemSelectedListener(this);
      }
  
      public void SubmitData(View view)
      {
  
          new PostDataAsyncTask().execute();
      }
  
      @Override
      public void onItemSelected(AdapterView&lt;?&gt; parent, View view, int pos, long id) 
      {
          // TODO Auto-generated method stub
  
          shopCategory = spinner.getItemAtPosition(pos).toString();
          Log.v("SHOP CATEGORY***********: ", shopCategory);
      }
  
  
  
  
  
      public class PostDataAsyncTask extends AsyncTask&lt;String, String, String&gt; 
      {
          ProgressDialog progressDialog;
  
          @Override
          protected void onPreExecute()
          {
              progressDialog= ProgressDialog.show(AddDiscountActivity.this, "Please Wait","Update Ads listings", true);
  
              //do initialization of required objects objects here                
          };  
  
          @Override
          protected String doInBackground(String... strings) {
              // TODO Auto-generated method stub
              try {
                  postAdData();
  
              } catch (NullPointerException e) {
                  e.printStackTrace();
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return null;
          }
  
           @Override
           protected void onPostExecute(String lenghtOfFile) {
               // do stuff after posting data
               super.onPostExecute(lenghtOfFile);
               progressDialog.dismiss();
               //Intent intent = new Intent(MainActivity.this, ThankYouAcitivty.class);
              // startActivity(intent);
  
           }
  
      }
  
      private void postAdData() throws JSONException{
          try{
              // url where the data will be posted
              String postReceiverUrl = "http://hye.com/displaypost.php";
  
              // HttpClient
              HttpClient httpClient = new DefaultHttpClient();
  
              // post header
              HttpPost httpPost = new HttpPost(postReceiverUrl);
              httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
              // add your data
              List&lt;NameValuePair&gt; nameValuePairs = new ArrayList&lt;NameValuePair&gt;(2);
  
              //All user input
              EditText shopNameEditText = (EditText)findViewById(R.id.shopName);
              EditText shopLocationEditText = (EditText)findViewById(R.id.shopLocation);
              EditText shopCityEditText = (EditText)findViewById(R.id.shopCity);
              EditText discountRateEditText = (EditText)findViewById(R.id.shopDiscount);
              EditText discountDurationEditText = (EditText)findViewById(R.id.shopDiscountDuration);
  
              shopNameEditText.getText().toString();
              shopLocationEditText.getText().toString();
              shopCityEditText.getText().toString();
              discountRateEditText.getText().toString();
               discountDurationEditText.getText().toString();
  
  
              /*******Fields Validation*********/
               if(shopNameEditText.getText().toString().length() == 0)
                   shopNameEditText.setError("يجب ادخال اسم المحل");
               if(shopLocationEditText.getText().toString().length() == 0)
                   shopLocationEditText.setError("يجب ادخال العنوان");
               if(shopCityEditText.getText().toString().length() == 0)
                   shopCityEditText.setError("يجب ادخال المدينة");
               if(discountRateEditText.getText().toString().length() == 0)
                   discountRateEditText.setError("يجب ادخال نسبة التخفيض");
  
  
              /*********************************/
  
              nameValuePairs.add(new BasicNameValuePair("name", shopName));
              nameValuePairs.add(new BasicNameValuePair("location", shopLocation));
              nameValuePairs.add(new BasicNameValuePair("city", shopCity));
              nameValuePairs.add(new BasicNameValuePair("rate", discountRate));
              nameValuePairs.add(new BasicNameValuePair("duration", discountDuration));
              nameValuePairs.add(new BasicNameValuePair("category", shopCategory));
  
              httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
  
              // execute HTTP post request
  
              HttpResponse response = httpClient.execute(httpPost);
              HttpEntity resEntity = response.getEntity();
  
              if (resEntity != null) {
  
                  String responseStr = EntityUtils.toString(resEntity).trim();
                  Log.v("", "Response: " +  responseStr);
  
                  // you can add an if statement here and do other actions based on the response
              }
  
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  </code></pre>