diff options
author | RHenigan <heniganr1@gmail.com> | 2020-06-25 08:38:15 -0400 |
---|---|---|
committer | RHenigan <heniganr1@gmail.com> | 2020-06-25 08:38:15 -0400 |
commit | c2bd565c585cacad81156b4599225548be0606c0 (patch) | |
tree | 565c0cb69c88e6f5d1772a93a7204f945082a99d | |
parent | 90ca4873451e4a242b99383708eb4e1e58f88e46 (diff) | |
download | sdl_android-bugfix/issue_1377_HttpRequestTask.tar.gz |
Implement JavaSE Methodsbugfix/issue_1377_HttpRequestTask
-rw-r--r-- | javaSE/src/main/java/com/smartdevicelink/util/HttpRequestTask.java | 165 |
1 files changed, 163 insertions, 2 deletions
diff --git a/javaSE/src/main/java/com/smartdevicelink/util/HttpRequestTask.java b/javaSE/src/main/java/com/smartdevicelink/util/HttpRequestTask.java index a77370db8..6ecc73e6e 100644 --- a/javaSE/src/main/java/com/smartdevicelink/util/HttpRequestTask.java +++ b/javaSE/src/main/java/com/smartdevicelink/util/HttpRequestTask.java @@ -1,22 +1,183 @@ package com.smartdevicelink.util; +import android.os.AsyncTask; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.net.HttpURLConnection; +import java.net.URL; + + @Deprecated -public class HttpRequestTask { +public class HttpRequestTask extends AsyncTask<String, String, String> { + private static final String TAG = "Http Request Task"; + public static final String REQUEST_TYPE_POST = "POST"; public static final String REQUEST_TYPE_GET = "GET"; public static final String REQUEST_TYPE_DELETE = "DELETE"; + HttpRequestTaskCallback cb; + + /** + * @param hcb callback for when this task finishes + * <br><br><b> - When calling execute, params as followed: </b><br> + * 1. Url String<br> + * 2. Request type (Defined in this class) REQUEST_TYPE_POST, REQUEST_TYPE_GET, REQUEST_TYPE_DELETE<br> + * 3. (Optional) Data to be sent. <br> + * 4. (Optional) Content Type Default will be application/json<br> + * 5. (Optional) Accept Type default will be application/json + * + */ @Deprecated - public HttpRequestTask( HttpRequestTaskCallback hcb){ } + public HttpRequestTask( HttpRequestTaskCallback hcb){ + this.cb = hcb; + } @Deprecated protected String doInBackground(String... params) { + int length = params.length; + String urlString = params[0]; + String request_type = params[1]; + + //Grab and set data to be written if included + String data; + if(length>2){ + data = params[2]; + }else{ + data = null; + } + + //Grab and set content type for the header if included + String contentType; + if(length>3){ + contentType = params[3]; + }else{ + contentType = "application/json"; + } + //Grab and set accept type for the header if included + String acceptType; + if(length>4){ + acceptType = params[4]; + }else{ + acceptType = "application/json"; + } + + if(urlString == null || request_type == null){ + Log.e(TAG, "Can't process request, param error"); + if(cb!=null){ + cb.httpFailure(-1); + cb = null; + } + return "Error"; + } + + HttpURLConnection urlConnection = null; + BufferedReader reader = null; + try { + URL url = new URL(urlString); + urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setDoOutput(true); + urlConnection.setRequestMethod(request_type); + urlConnection.setRequestProperty("Content-Type", contentType); + urlConnection.setRequestProperty("Accept", acceptType); + //If we have data, we should write it out + if(data !=null){ + Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8")); + writer.write(data); + writer.close(); + } + InputStream inputStream = urlConnection.getInputStream(); + + int responseCode = urlConnection.getResponseCode(); + if (responseCode == 200) { //Success + //input stream + StringBuffer buffer = new StringBuffer(); + if (inputStream == null) { + // Nothing to do. + if(cb!=null){ + cb.httpCallComplete(null); + cb = null; + } + return null; + } + reader = new BufferedReader(new InputStreamReader(inputStream)); + + String inputLine; + while ((inputLine = reader.readLine()) != null) + buffer.append(inputLine).append("\n"); + if (buffer.length() == 0) { + // Stream was empty. No point in parsing. + if(cb!=null){ + cb.httpCallComplete(null); + cb = null; + } + return null; + } + String response = null; + + response = buffer.toString(); + //send to post execute + if(cb!=null){ + cb.httpCallComplete(response); + cb = null; + } + return response; + }else{ + if(cb!=null){ + cb.httpFailure(responseCode); + cb = null; + } + Log.e(TAG, "Failed to download file - " + responseCode); + return null; + } + + + } catch (IOException e) { + e.printStackTrace(); + } catch (NullPointerException e){ // Only to catch error in urlConnection.getOutputStream() - when servers are down + e.printStackTrace(); + urlConnection = null; + } + finally { + if (urlConnection != null) { + urlConnection.disconnect(); + } + if (reader != null) { + try { + reader.close(); + } catch (final IOException e) { + Log.e(TAG, "Error closing stream", e); + } + } + if(cb!=null){ + cb.httpFailure(-1); + } + } return null; } + /** + * Callback interface for HTTP requests. + * @author Joey Grover + * + */ @Deprecated public interface HttpRequestTaskCallback{ + /** + * Called when HTTP request is successfully completed. + * @param response The response to the HTTP request. + */ public abstract void httpCallComplete(String response); + /** + * Called when HTTP request failed. + * @param statusCode The HTTP failure code. + */ public abstract void httpFailure(int statusCode); } |