title: Multiple Images Uploads OOM issues
body: <p>The below code uploads 4 images from a phone/tab gallery to a server
  and writes the paths to a DB. On testing it, it is currently It is
  uploading all 4 images if they are 150kb and below. The problem comes
  in when i try to upload 1Mb images. The app crashes on loading the
  second image to iv.  I have read this Android Bitmaps but i cant
  figure out how to implement it in my code. Kindly help.</p>
  
  <pre><code>public class MainActivity extends AppCompatActivity {
  
      Bitmap bitmap1;
      Bitmap bitmap2;
      Bitmap bitmap3;
      Bitmap bitmap4;
  
      boolean check = true;
  
      Button SelectImageGallery1;
      Button SelectImageGallery2;
      Button SelectImageGallery3;
      Button SelectImageGallery4;
  
      Button UploadImageServer;
  
      ImageView imageView1;
      ImageView imageView2;
      ImageView imageView3;
      ImageView imageView4;
  
      EditText imageName1;
      EditText imageName2;
      EditText imageName3;
      EditText imageName4;
  
      ProgressDialog progressDialog;
  
      String GetImageNameEditText1;
      String GetImageNameEditText2;
      String GetImageNameEditText3;
      String GetImageNameEditText4;
  
      String ImageName1 = "image_name1";
      String ImageName2 = "image_name2";
      String ImageName3 = "image_name3";
      String ImageName4 = "image_name4";
  
      String ImagePath1 = "image_path1";
      String ImagePath2 = "image_path2";
      String ImagePath3 = "image_path3";
      String ImagePath4 = "image_path4";
  
      String ServerUploadPath = "http://ny.com/multiple4/uploadmultiple4.php";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          imageView1 = (ImageView) findViewById(R.id.imageView1);
          imageView2 = (ImageView) findViewById(R.id.imageView2);
          imageView3 = (ImageView) findViewById(R.id.imageView3);
          imageView4 = (ImageView) findViewById(R.id.imageView4);
  
          imageName1 = (EditText) findViewById(R.id.editTextImageName1);
          String strImageName1 = imageName1.getText().toString();
          if (TextUtils.isEmpty(strImageName1)) {
              imageName1.setError("Image Name Must Be Entered");
          }
          imageName2 = (EditText) findViewById(R.id.editTextImageName2);
          String strImageName2 = imageName2.getText().toString();
          if (TextUtils.isEmpty(strImageName2)) {
              imageName2.setError("Image Name Must Be Entered");
          }
          imageName3 = (EditText) findViewById(R.id.editTextImageName3);
          String strImageName3 = imageName3.getText().toString();
          if (TextUtils.isEmpty(strImageName3)) {
              imageName3.setError("Image Name Must Be Entered");
          }
          imageName4 = (EditText) findViewById(R.id.editTextImageName4);
          String strImageName4 = imageName4.getText().toString();
          if (TextUtils.isEmpty(strImageName4)) {
              imageName4.setError("Image Name Must Be Entered");
          }
  
          SelectImageGallery1 = (Button) findViewById(R.id.buttonSelect1);
          SelectImageGallery2 = (Button) findViewById(R.id.buttonSelect2);
          SelectImageGallery3 = (Button) findViewById(R.id.buttonSelect3);
          SelectImageGallery4 = (Button) findViewById(R.id.buttonSelect4);
  
          UploadImageServer = (Button) findViewById(R.id.buttonUpload);
  
          SelectImageGallery1.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Image1 From Gallery"), 1);
  
              }
          });
  
          SelectImageGallery2.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Image4 From Gallery"), 2);
              }
          });
  
          SelectImageGallery3.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Image3 From Gallery"), 3);
  
              }
          });
  
          SelectImageGallery4.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent();
                  intent.setType("image/*");
                  intent.setAction(Intent.ACTION_GET_CONTENT);
                  startActivityForResult(Intent.createChooser(intent, "Select Image4 From Gallery"), 4);
  
              }
          });
  
          UploadImageServer.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  GetImageNameEditText1 = imageName1.getText().toString();
                  GetImageNameEditText2 = imageName2.getText().toString();
                  GetImageNameEditText3 = imageName3.getText().toString();
                  GetImageNameEditText4 = imageName4.getText().toString();
                  ImageUploadToServerFunction();
              }
          });
  
      }
  
      @Override
      protected void onActivityResult(int RC, int RQC, Intent I) {
          super.onActivityResult(RC, RQC, I);
          if (RC == 1 &amp;&amp; RQC == RESULT_OK &amp;&amp; I != null &amp;&amp; I.getData() != null) {
              Uri uri = I.getData();
              try {
                  bitmap1 = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                  //bitmap1 = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                  imageView1.setImageBitmap(bitmap1);
              } catch(IOException e) {
                  e.printStackTrace();
              }
          }
  
          if (RC == 2 &amp;&amp; RQC == RESULT_OK &amp;&amp; I != null &amp;&amp; I.getData() != null) {
              Uri uri = I.getData();
              try {
                  bitmap2 = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                  //bitmap1 =
                  MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                  imageView2.setImageBitmap(bitmap2);
              } catch(IOException e) {
                  e.printStackTrace();
              }
          }
  
          if (RC == 3 &amp;&amp; RQC == RESULT_OK &amp;&amp; I != null &amp;&amp; I.getData() != null) {
              Uri uri = I.getData();
              byte[] imageAsBytes = null;
              try {
                  bitmap3 = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                  //bitmap1 =
                  MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                  imageView3.setImageBitmap(bitmap3);
              } catch(IOException e) {
                  e.printStackTrace();
              }
          }
          if (RC == 4 &amp;&amp; RQC == RESULT_OK &amp;&amp; I != null &amp;&amp; I.getData() != null) {
              Uri uri = I.getData();
              try {
                  bitmap4 = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                  //bitmap1 =
                  MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                  imageView4.setImageBitmap(bitmap4);
              } catch(IOException e) {
                  e.printStackTrace();
              }
          }
      }
      public String getStringImage1(Bitmap bitmap1) {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          bitmap1.compress(Bitmap.CompressFormat.JPEG, 60, baos);
          byte[] imageBytes = baos.toByteArray();
          String encodedImage1 = Base64.encodeToString(imageBytes, Base64.DEFAULT);
          return encodedImage1;
      }
  
      public String getStringImage2(Bitmap bitmap2) {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          bitmap2.compress(Bitmap.CompressFormat.JPEG, 60, baos);
          byte[] imageBytes = baos.toByteArray();
          String encodedImage2 = Base64.encodeToString(imageBytes, Base64.DEFAULT);
          return encodedImage2;
      }
      public String getStringImage3(Bitmap bitmap3) {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          bitmap3.compress(Bitmap.CompressFormat.JPEG, 60, baos);
          byte[] imageBytes = baos.toByteArray();
          String encodedImage3 = Base64.encodeToString(imageBytes, Base64.DEFAULT);
          return encodedImage3;
      }
  
      public String getStringImage4(Bitmap bitmap4) {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          bitmap4.compress(Bitmap.CompressFormat.JPEG, 60, baos);
          byte[] imageBytes = baos.toByteArray();
          String encodedImage4 = Base64.encodeToString(imageBytes, Base64.DEFAULT);
          return encodedImage4;
      }
  
      public void ImageUploadToServerFunction() {
          final String imageName1 = GetImageNameEditText1.trim();
          final String imageName2 = GetImageNameEditText2.trim();
          final String imageName3 = GetImageNameEditText3.trim();
          final String imageName4 = GetImageNameEditText4.trim();
          final String imageView1 = getStringImage1(bitmap1);
          final String imageView2 = getStringImage2(bitmap2);
          final String imageView3 = getStringImage3(bitmap3);
          final String imageView4 = getStringImage4(bitmap4);
  
          class AsyncTaskUploadClass extends AsyncTask &lt;Void, Void, String&gt; {
  
              @Override
              protected void onPreExecute() {
  
                  super.onPreExecute();
  
                  progressDialog = ProgressDialog.show(MainActivity.this, "Image is Uploading", "Please Wait", false, false);
              }
  
              @Override
              protected void onPostExecute(String string1) {
  
                  super.onPostExecute(string1);
  
                  // Dismiss the progress dialog after done uploading.
                  progressDialog.dismiss();
  
                  // Printing uploading success message coming from server on android app.
                  Toast.makeText(MainActivity.this, string1, Toast.LENGTH_LONG).show();
  
                  // Setting image as transparent after done uploading.
                  ImageView cleared1 = (ImageView) findViewById(R.id.imageView1);
                  cleared1.setImageResource(android.R.color.transparent);
  
                  ImageView cleared2 = (ImageView) findViewById(R.id.imageView2);
                  cleared2.setImageResource(android.R.color.transparent);
  
                  ImageView cleared3 = (ImageView) findViewById(R.id.imageView3);
                  cleared3.setImageResource(android.R.color.transparent);
  
                  ImageView cleared4 = (ImageView) findViewById(R.id.imageView4);
                  cleared4.setImageResource(android.R.color.transparent);
  
              }
  
              @Override
              protected String doInBackground(Void...params) {
                  ImageProcessClass imageProcessClass = new ImageProcessClass();
                  HashMap &lt;String, String&gt; HashMapParams = new HashMap &lt;String, String&gt; ();
                  HashMapParams.put(ImageName1, imageName1);
                  HashMapParams.put(ImageName2, imageName2);
                  HashMapParams.put(ImageName3, imageName3);
                  HashMapParams.put(ImageName4, imageName4);
                  HashMapParams.put(ImagePath1, imageView1);
                  HashMapParams.put(ImagePath2, imageView2);
                  HashMapParams.put(ImagePath3, imageView3);
                  HashMapParams.put(ImagePath4, imageView4);
  
                  String FinalData = imageProcessClass.ImageHttpRequest(ServerUploadPath, HashMapParams);
                  return FinalData;
              }
          }
          AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new
          AsyncTaskUploadClass();
          AsyncTaskUploadClassOBJ.execute();
      }
  
      public class ImageProcessClass {
          public String ImageHttpRequest(String
          requestURL, HashMap &lt;String, String&gt; PData) {
              StringBuilder stringBuilder = new StringBuilder();
              try {
                  URL url;
                  HttpURLConnection httpURLConnectionObject;
                  OutputStream OutPutStream;
                  BufferedWriter bufferedWriterObject;
                  BufferedReader bufferedReaderObject;
                  int RC;
                  url = new URL(requestURL);
                  httpURLConnectionObject = (HttpURLConnection)
                  url.openConnection();
                  httpURLConnectionObject.setReadTimeout(19000);
                  httpURLConnectionObject.setConnectTimeout(19000);
                  httpURLConnectionObject.setRequestMethod("POST");
                  httpURLConnectionObject.setDoInput(true);
                  httpURLConnectionObject.setDoOutput(true);
                  OutPutStream = httpURLConnectionObject.getOutputStream();
                  bufferedWriterObject = new BufferedWriter(
                  new OutputStreamWriter(OutPutStream, "UTF-8"));
                  bufferedWriterObject.write(bufferedWriterDataFN(PData));
                  bufferedWriterObject.flush();
                  bufferedWriterObject.close();
                  OutPutStream.close();
                  RC = httpURLConnectionObject.getResponseCode();
                  if (RC == HttpsURLConnection.HTTP_OK) {
                      bufferedReaderObject = new BufferedReader(new
                      InputStreamReader(httpURLConnectionObject.getInputStream()));
                      stringBuilder = new StringBuilder();
                      String RC2;
                      while ((RC2 = bufferedReaderObject.readLine()) != null) {
                          stringBuilder.append(RC2);
                      }
                  }
              } catch(Exception e) {
                  e.printStackTrace();
              }
              return stringBuilder.toString();
          }
  
          private String bufferedWriterDataFN(HashMap &lt;String, String&gt; HashMapParams) throws UnsupportedEncodingException {
              StringBuilder stringBuilderObject;
              stringBuilderObject = new StringBuilder();
              for (Map.Entry &lt; String, String &gt; KEY: HashMapParams.entrySet()) {
                  if (check) check = false;
                  else stringBuilderObject.append("&amp;");
  
                  stringBuilderObject.append(URLEncoder.encode(KEY.getKey(), "UTF-8"));
                  stringBuilderObject.append("=");
  
                  stringBuilderObject.append(URLEncoder.encode(KEY.getValue(), "UTF-8"));
              }
  
              return stringBuilderObject.toString();
          }
      }
  }
  
  </code></pre>