title: Android StrictMode Throwable: Explicit termination method 'end' not called
body: <p>I'm seeing a StrictMode failure, and I can't see what's wrong with what I'm doing. The failure is:</p>
  
  <pre><code>java.lang.Throwable: Explicit termination method 'end' not called
      E/StrictMode(26875):    at dalvik.system.CloseGuard.open(CloseGuard.java:184)
      E/StrictMode(26875):    at java.util.zip.Inflater.&lt;init&gt;(Inflater.java:82)
      E/StrictMode(26875):    at java.util.zip.GZIPInputStream.&lt;init&gt;(GZIPInputStream.java:96)
      E/StrictMode(26875):    at java.util.zip.GZIPInputStream.&lt;init&gt;(GZIPInputStream.java:81)
      E/StrictMode(26875):    at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:528)
      E/StrictMode(26875):    at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:836)
      E/StrictMode(26875):    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
      E/StrictMode(26875):    at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
      E/StrictMode(26875):    at com.mycompany.MyClass.sendJson(MyClass.java:267)
  </code></pre>
  
  <p>I configure StrictMode:</p>
  
  <pre><code>if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.HONEYCOMB) {
      StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog()
                      .penaltyDeath().build());
  }
  </code></pre>
  
  <p>The code looks something like the following:</p>
  
  <pre><code>HttpURLConnection connection = null;
  OutputStream outputStream = null;
  InputStream in = null;
  
  try {
          connection = (HttpURLConnection)new URL("http://our.server/some/path").openConnection();
  
          connection.setRequestProperty("Accept", "application/json");
          connection
                  .setRequestProperty("Content-Type", "application/json; charset=UTF-8");
          connection.setDoOutput(true);
  
          outputStream = connection.getOutputStream();
  
          String content = "{\"some\":\"json data\"}";
          byte bytes[] = content.getBytes("UTF-8");
          outputStream.write(bytes);
          outputStream.flush();
  
          responseCode = connection.getResponseCode(); // This is line 267 in the stack trace
  
          if (HttpURLConnection.HTTP_OK == responseCode
                  || HttpURLConnection.HTTP_CREATED == responseCode) {
  
              // do something with a successful response
          }
      }
  
  } catch (IOException e) {
      // report the exception
  } finally {
      if (null != connection) {
          connection.disconnect();
      }
      if (null != outputStream) {
          try {
              outputStream.close();
          } catch (IOException e) {
          }
      }
      if (null != in) {
          try {
              in.close();
          } catch (IOException e) {
          }
      }
  }
  </code></pre>
  
  <p>I found somebody complaining of seeing the same StrictMode failure when using Google AdMob SDK (<a href="https://groups.google.com/forum/?fromgroups=#!topic/google-admob-ads-sdk/yVss4ufdPp4" rel="noreferrer">https://groups.google.com/forum/?fromgroups=#!topic/google-admob-ads-sdk/yVss4ufdPp4</a>) but I've not been able to find any solution so far.</p>