title: How to show a progress spinner in android, when doInBackground() is being executed
body: <p>This is my Activity class where i use AsyncTask to get data from a server:</p>
  
  <pre><code>public class UserProfileActivity extends Activity {
  
      private ImageView userImage;
      private TextView userName;
      private TextView userLocation;
      private TextView editInfo;
      private TextView chnageImage;
      private TextView userScore;
      private ListView friendsList;
      public ArrayAdapter&lt;String&gt; adapter;
      public int score;
      public int level;
      public String image;
      public String fname;
      public String lname;
      public String city;
      public int id;
      public String email;
      protected Activity activity = this;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.user_profile);
  
          userImage = (ImageView) findViewById(R.id.profileImage);
          userName = (TextView) findViewById(R.id.userName_profile);
          userLocation = (TextView) findViewById(R.id.userLocation_profile);
          editInfo = (TextView) findViewById(R.id.edit_profile);
          chnageImage = (TextView) findViewById(R.id.changeImage_profile);
          userScore = (TextView) findViewById(R.id.userScore_profile);
          friendsList = (ListView) findViewById(R.id.friendsList);
  
          new LongOperation().execute("");
  
      }
  
      private class LongOperation extends AsyncTask&lt;String, Void, String&gt; {
  
          private InputStream is;
          private StringBuilder sb;
          private String result;
  
          @Override
          protected String doInBackground(String... params) {
  
              try {
                  HttpPost httppost = new HttpPost(
                          "http://www.xxxxxxxxx.com/mobile/getProfileInfo");
                  HttpResponse response = SignUpActivity.httpclient
                          .execute(httppost);
                  HttpEntity entity = response.getEntity();
                  is = entity.getContent();
  
                  try {
                      BufferedReader reader = new BufferedReader(
                              new InputStreamReader(is, "iso-8859-1"), 8);
                      sb = new StringBuilder();
                      sb.append(reader.readLine() + "\n");
                      String line = "0";
                      while ((line = reader.readLine()) != null) {
                          sb.append(line + "\n");
                      }
                      is.close();
                      result = sb.toString();
                  } catch (Exception e) {
                  }
                  try {
                      JSONObject jObj = new JSONObject(result);
                      String status = jObj.getString("status");
                      score = jObj.getInt("credits");
                      level = jObj.getInt("level");
                      image = jObj.getString("image");
                      fname = jObj.getString("fname");
                      lname = jObj.getString("lname");
                      city = jObj.getString("city");
                      id = jObj.getInt("user_id");
                      email = jObj.getString("email");
  
                      JSONArray friendsJsonArray = jObj.getJSONArray("friends");
                      int size = friendsJsonArray.length();
  
                      ArrayList&lt;String&gt; friendsNames = new ArrayList&lt;String&gt;();
                      String[] friendsIds = new String[size];
                      for (int i = 0; i &lt; size; i++) {
  
                          friendsNames.add(friendsJsonArray.getJSONObject(i)
                                  .getString("name"));
                      }
                      adapter = new ArrayAdapter&lt;String&gt;(getApplicationContext(),
                              R.layout.simple_listview_item, friendsNames);
  
                  } catch (Exception e) {
                  }
              } catch (Exception e) {
              }
  
              return "Executed";
          }
  
          @Override
          protected void onPostExecute(String result) {
  
              friendsList.setAdapter(adapter);
              userScore.setText(score + " points" + "   level " + level);
              userName.setText(fname + "  " + lname);
              userLocation.setText(city);
              Bitmap bitmap = null;
              try {
                  bitmap = BitmapFactory
                          .decodeStream((InputStream) new URL(image).getContent());
              } catch (MalformedURLException e1) {
  
                  e1.printStackTrace();
              } catch (IOException e2) {
  
                  e2.printStackTrace();
              }
              userImage.setImageBitmap(bitmap);
  
          }
  
          @Override
          protected void onPreExecute() {
          }
  
          @Override
          protected void onProgressUpdate(Void... values) {
          }
      }
  }
  </code></pre>
  
  <p>when this activity is loaded it shows all the default values and images and then changes when background code execution is competed(as excepted), but this takes 2-3 secs for which user will be seeing default values, which i dont want to. So how can i keep a spinner like this:</p>
  
  <p><img src="https://i.stack.imgur.com/bdrWhs.png" alt="enter image description here"></p>
  
  <p>for 2-3 secs and then when the spinner disappears the activity must show the actual values.</p>
  
  <p>Thank you</p>