0

Ich habe den folgenden Code geschrieben und es funktioniert gut.So schließen Sie die Ressourcen von Try-with-Ressource-Anweisung

public void callingTheAPI() throws IOException{ 

    BufferedReader bufferedReader= null; 
    CloseableHttpClient httpclient= null; 
    CloseableHttpResponse httpResponse= null; 

    try { 
     httpclient = HttpClients.createDefault(); 
     HttpGet httpGet= new HttpGet(URL); 
     httpGet.addHeader("Authorization","Bearer "+getToken()); 

     httpResponse=httpclient.execute(httpGet); 
     int responseCode= httpResponse.getStatusLine().getStatusCode(); 
     System.out.println(responseCode); 

     bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent())); 

     StringBuilder stringBuilder= new StringBuilder(); 
     String line; 
     while((line=bufferedReader.readLine())!=null){ 
      stringBuilder.append(line); 

     } 

     System.out.println(stringBuilder.toString()); 
    } 

    catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    finally{ 

     if (bufferedReader != null){ 
      bufferedReader.close(); 
     } 

     if(httpResponse != null){ 
      httpResponse.close(); 
     } 
     if (httpclient != null){ 
      httpclient.close(); 
     } 
    } 

} 

Vor kurzem fand ich heraus, dass es ein neues Feature try-with-resource von java 7 ab aufgerufen ist, die automatisch die Ressourcen schließen, nachdem die Anweisung ordnungsgemäß ausgeführt. Wie kann ich den folgenden Code konvertieren, um try-with-resource statement zu verwenden. Ich habe ein bisschen getan, aber ich bin verwirrt, wie man alle Ressourcen hinzufügen kann. Hier ist der Code

public void closeResources(){ 



    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    HttpGet httpGet= new HttpGet(URL); 
    httpGet.addHeader("Authorization","Bearer "+getToken()); 

    CloseableHttpResponse httpResponse=httpclient.execute(httpGet); 
    int responseCode= httpResponse.getStatusLine().getStatusCode(); 
    System.out.println(responseCode); 


    try(BufferedReader bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent()))){ 
     StringBuilder stringBuilder= new StringBuilder(); 
     String line; 
     while((line=bufferedReader.readLine())!=null){ 
      stringBuilder.append(line); 

     } 

     System.out.println(stringBuilder.toString()); 


    } catch (UnsupportedOperationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 




} 

}

Können Sie mir bitte helfen, diesen Code zu konvertieren, so dass es try-with-resources Aussagen verwendet. Vielen Dank im Voraus

+0

Bitte schließen Sie die Frage, wenn sie beantwortet wurde. – Beri

Antwort

0

Verwenden Sie ';' als Trennzeichen, um Ihre Ressourcen zu trennen. Jetzt werden die Ressourcen in der Reihenfolge ihrer Deklaration geschlossen, also: BufferedReader, InputStreamReader, CloseableHttpResponse.

Sie können auch verschließbare Objekte aus Methoden zurückgeben, wie im folgenden Beispiel, so dass Sie sie ändern können, bevor Sie sie dem try-catch-Block zuweisen.

Sie können dieses Tutorial betrachten, um mehrere try-catch-resources zu entziffern.

public void closeResources(){ 
     try(CloseableHttpResponse httpResponse = createCloseableHttpResponse(); 
     InputStreamReader reader = new InputStreamReader(httpResponse.getEntity().getContent()); 
     BufferedReader bufferedReader= new BufferedReader(reader)){ 

     StringBuilder stringBuilder= new StringBuilder(); 
     String line; 
     while((line=bufferedReader.readLine())!=null){ 
      stringBuilder.append(line); 

     } 

     System.out.println(stringBuilder.toString()); 


    } catch (UnsupportedOperationException | IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

private CloseableHttpResponse createCloseableHttpResponse() throws IOException{ 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    HttpGet httpGet= new HttpGet(""); 
    httpGet.addHeader("Authorization","Bearer "+getToken()); 
    return httpclient.execute(httpGet); 
} 
+0

wo instanziieren wir die 'HttpGet' Klasse und setzen Header für sendind Tokens und etc .. –

+0

Erstellen Sie einfach Factory-Methoden, die verschließbare Objekte zurückgeben. Code wurde aktualisiert, Sie können einen Blick darauf werfen – Beri

Verwandte Themen