package net.callumtaylor.asynchttp;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import net.callumtaylor.asynchttp.obj.ConnectionInfo;
import net.callumtaylor.asynchttp.obj.NameValuePair;
import net.callumtaylor.asynchttp.obj.RequestMode;
import net.callumtaylor.asynchttp.obj.RequestUtil;
import net.callumtaylor.asynchttp.response.ByteArrayResponseHandler;
import net.callumtaylor.asynchttp.response.ResponseHandler;
import java.util.List;
import okhttp3.Cache;
import okhttp3.Headers;
import okhttp3.RequestBody;
/**
* This class is a synchronous class which runs on any thread that the code was created
* on. This will throw a {@link android.os.NetworkOnMainThreadException} if ran on the UI thread.
*
* <b>Note:</b> Because of the way SyncHttpClient works, only one instance can be created
* at a time. If one client makes 2 requests, the first request is canceled for the new
* request. You can either wait for the first to finish before making the second, or you
* can create two separate instances.
*
* <b>Depends on</b>
* <ul>
* <li>{@link net.callumtaylor.asynchttp.response.ResponseHandler}</li>
* <li>{@link RequestBody}</li>
* <li>{@link NameValuePair}</li>
* <li>{@link ConnectionInfo}</li>
* <li>{@link net.callumtaylor.asynchttp.obj.Packet}</li>
* <li>{@link RequestMode}</li>
* <li>{@link RequestUtil}</li>
* </ul>
* <h1>Example GET</h1>
*
* SyncHttpClient is a paramitized class which means the type you infer to it, is the type
* that gets returned when calling the method. When supplying a {@link net.callumtaylor.asynchttp.response.ResponseHandler}, that
* processor must also paramitized with the same type as the SyncHttpClient instance.
*
* <pre>
* SyncHttpClient<JsonElement> client = new SyncHttpClient<JsonElement>("http://example.com");
* List<NameValuePair> params = new ArrayList<NameValuePair>();
* params.add(new NameValuePair("key", "value"));
*
* JsonElement response = client.get("api/v1/", params, new JsonResponseHandler());
* </pre>
*
* <h1>Example DELETE</h1>
*
* <pre>
* SyncHttpClient<JsonElement> client = new SyncHttpClient<JsonElement>("http://example.com");
* List<NameValuePair> params = new ArrayList<NameValuePair>();
* params.add(new NameValuePair("key", "value"));
*
* JsonElement response = client.delete("api/v1/", params, new JsonResponseHandler());
* </pre>
*
* Because of the nature of REST, GET and DELETE requests behave in the same
* way, POST and PUT requests also behave in the same way.
*
* @author Callum Taylor <callumtaylor.net> @scruffyfox
*/
public class SyncHttpClient<E>
{
/**
* User agent to send with every request. Defaults to {@link RequestUtil#getDefaultUserAgent()}
*/
public static String userAgent = RequestUtil.getDefaultUserAgent();
/**
* Instance for where to store cached requests. Defaults to null (off). You should set this to {@link Context#getCacheDir()}
* if you want auto cache-control handling
*/
public static Cache cache = null;
private Uri requestUri;
private long requestTimeout = 0L;
private boolean allowAllSsl = false;
private boolean allowRedirect = false;
private ClientExecutorTask<E> executor;
/**
* Creates a new client using a base Url without a timeout
* @param baseUrl The base connection url
*/
public SyncHttpClient(String baseUrl)
{
this(baseUrl, 0);
}
/**
* Creates a new client using a base Uri without a timeout
* @param baseUri The base connection uri
*/
public SyncHttpClient(Uri baseUri)
{
this(baseUri, 0);
}
/**
* Creates a new client using a base Url with a timeout in MS
* @param baseUrl The base connection url
* @param timeout The timeout in MS
*/
public SyncHttpClient(String baseUrl, long timeout)
{
this(Uri.parse(baseUrl), timeout);
}
/**
* Creates a new client using a base Uri with a timeout in MS
* @param baseUri The base connection uri
* @param timeout The timeout in MS
*/
public SyncHttpClient(Uri baseUri, long timeout)
{
requestUri = baseUri;
requestTimeout = timeout;
}
/**
* Cancels the current executor task
*/
public void cancel()
{
if (executor != null)
{
executor.cancel();
}
}
/**
* Performs a GET request on the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(@NonNull ResponseHandler<?> response)
{
return get("", null, null, response);
}
/**
* Performs a GET request on the baseUri
* @param path The path extended from the baseUri
*
* @return The response object, or null
*/
@Nullable
public E get(String path)
{
return get(path, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a GET request on the baseUri
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(String path, @NonNull ResponseHandler<?> response)
{
return get(path, null, null, response);
}
/**
* Performs a GET request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return get("", null, headers, response);
}
/**
* Performs a GET request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return get("", params, null, response);
}
/**
* Performs a GET request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return get("", params, headers, response);
}
/**
* Performs a GET request on the baseUri
* @param path The path extended from the baseUri
* @param params The request params for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return get(path, params, null, response);
}
/**
* Performs a GET request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return get(path, null, headers, response);
}
/**
* Performs a GET request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E get(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.GET, requestUri, headers, null, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(@NonNull ResponseHandler<?> response)
{
return options("", null, null, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param path The path extended from the baseUri
*/
public E options(String path)
{
return options(path, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a OPTIONS request on the baseUri
* @param path The path extended from the baseUri
* @param response The response handler for the request
*/
public E options(String path, @NonNull ResponseHandler<?> response)
{
return options(path, null, null, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return options("", null, headers, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return options("", params, null, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return options("", params, headers, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param path The path extended from the baseUri
* @param params The request params for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return options(path, params, null, response);
}
/**
* Performs a OPTIONS request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E options(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.OPTIONS, requestUri, headers, null, response);
}
/**
* Performs a HEAD request on the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(@NonNull ResponseHandler<?> response)
{
return head("", null, null, response);
}
/**
* Performs a HEAD request on the baseUri
* @param path The path extended from the baseUri
*
* @return The response object, or null
*/
@Nullable
public E head(String path)
{
return head(path, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a HEAD request on the baseUri
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(String path, @NonNull ResponseHandler<?> response)
{
return head(path, null, null, response);
}
/**
* Performs a HEAD request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return head("", params, null, response);
}
/**
* Performs a HEAD request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return head("", null, headers, response);
}
/**
* Performs a HEAD request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return head("", params, headers, response);
}
/**
* Performs a HEAD request on the baseUri
* @param path The path extended from the baseUri
* @param params The request params for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return head(path, params, null, response);
}
/**
* Performs a HEAD request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return head(path, null, headers, response);
}
/**
* Performs a HEAD request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E head(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.HEAD, requestUri, headers, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(@NonNull ResponseHandler<?> response)
{
return delete("", null, null, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
*/
public E delete(String path)
{
return delete(path, null, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @NonNull ResponseHandler<?> response)
{
return delete(path, null, null, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return delete("", null, null, headers, response);
}
/**
* Performs a DELETE request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return delete("", params, null, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return delete("", params, headers, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param params The request params for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return delete(path, params, null, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return delete(path, null, null, headers, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.DELETE, requestUri, headers, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param params The Query params to append to the baseUri
* @param deleteData The delete data entity to delete to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(@Nullable List<NameValuePair> params, @Nullable RequestBody deleteData, @NonNull ResponseHandler<?> response)
{
return delete("", params, deleteData, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param deleteData The delete data entity to delete to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(RequestBody deleteData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return delete("", null, deleteData, headers, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param deleteData The delete data entity to delete to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable RequestBody deleteData, @NonNull ResponseHandler<?> response)
{
return delete(path, null, deleteData, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param deleteData The delete data entity to delete to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable RequestBody deleteData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return delete(path, null, deleteData, headers, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param deleteData The delete data entity to delete to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody deleteData, @NonNull ResponseHandler<?> response)
{
return delete(path, params, deleteData, null, response);
}
/**
* Performs a DELETE request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param deleteData The delete data entity to delete to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E delete(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody deleteData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.DELETE, requestUri, headers, deleteData, response);
}
/**
* Performs a POST request on the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@NonNull ResponseHandler<?> response)
{
return post("", null, null, null, response);
}
/**
* Performs a POST request on the baseUr
* @param path The path extended from the baseUri
*
* @return The response object, or null
*/
@Nullable
public E post(String path)
{
return post(path, null, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a POST request on the baseUr
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @NonNull ResponseHandler<?> response)
{
return post(path, null, null, null, response);
}
/**
* Performs a POST request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return post("", params, null, null, response);
}
/**
* Performs a POST request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post("", null, null, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post("", params, null, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(RequestBody postData, @NonNull ResponseHandler<?> response)
{
return post("", null, postData, null, response);
}
/**
* Performs a POST request on the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post("", null, postData, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return post("", params, postData, null, response);
}
/**
* Performs a POST request on the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(@Nullable List<NameValuePair> params, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post("", params, postData, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return post(path, params, null, null, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post(path, null, null, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post(path, params, null, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return post(path, null, postData, null, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return post(path, null, postData, headers, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return post(path, params, postData, null, response);
}
/**
* Performs a POST request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E post(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.POST, requestUri, headers, postData, response);
}
/**
* Performs a PUT request on the baseUr
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(@NonNull ResponseHandler<?> response)
{
return put("", null, null, null, response);
}
/**
* Performs a PUT request on the baseUr
* @param path The path extended from the baseUri
*
* @return The response object, or null
*/
@Nullable
public E put(String path)
{
return put(path, null, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a PUT request on the baseUr
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @NonNull ResponseHandler<?> response)
{
return put(path, null, null, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return put("", params, null, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put("", null, null, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put("", params, null, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(RequestBody postData, @NonNull ResponseHandler<?> response)
{
return put("", null, postData, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put("", null, postData, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(@Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return put("", params, postData, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return put(path, params, null, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put(path, null, null, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put(path, params, null, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return put(path, null, postData, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return put(path, null, postData, headers, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return put(path, params, postData, null, response);
}
/**
* Performs a PUT request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E put(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.PUT, requestUri, headers, postData, response);
}
/**
* Performs a PATCH request on the baseUr
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(@NonNull ResponseHandler<?> response)
{
return patch("", null, null, null, response);
}
/**
* Performs a PATCH request on the baseUr
* @param path The path extended from the baseUri
*
* @return The response object, or null
*/
@Nullable
public E patch(String path)
{
return patch(path, null, null, null, new ByteArrayResponseHandler());
}
/**
* Performs a PATCH request on the baseUr
* @param path The path extended from the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @NonNull ResponseHandler<?> response)
{
return patch(path, null, null, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(@Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return patch("", params, null, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(@Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch("", null, null, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(@Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch("", params, null, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(RequestBody postData, @NonNull ResponseHandler<?> response)
{
return patch("", null, postData, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch("", null, postData, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(@Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return patch("", params, postData, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable List<NameValuePair> params, @NonNull ResponseHandler<?> response)
{
return patch(path, params, null, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch(path, null, null, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable List<NameValuePair> params, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch(path, params, null, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return patch(path, null, postData, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
return patch(path, null, postData, headers, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @NonNull ResponseHandler<?> response)
{
return patch(path, params, postData, null, response);
}
/**
* Performs a PATCH request on the baseUri
* @param path The path extended from the baseUri
* @param params The Query params to append to the baseUri
* @param postData The post data entity to post to the server
* @param headers The request headers for the connection
* @param response The response handler for the request
*
* @return The response object, or null
*/
@Nullable
public E patch(String path, @Nullable List<NameValuePair> params, @Nullable RequestBody postData, @Nullable Headers headers, @NonNull ResponseHandler<?> response)
{
if (!TextUtils.isEmpty(path))
{
requestUri = Uri.withAppendedPath(requestUri, path);
}
requestUri = RequestUtil.appendParams(requestUri, params);
return executeTask(RequestMode.PATCH, requestUri, headers, postData, response);
}
private E executeTask(RequestMode mode, Uri uri, @Nullable Headers headers, @Nullable RequestBody sendData, ResponseHandler<?> requestProcessor)
{
if (headers == null)
{
headers = new Headers.Builder().build();
}
headers = headers.newBuilder().add("User-Agent", userAgent).build();
executor = new ClientExecutorTask<E>(mode, uri, headers, sendData, requestProcessor, allowRedirect, allowAllSsl, requestTimeout, cache);
executor.preExecute();
E response = executor.executeTask();
executor.postExecute();
return response;
}
/**
* Sets to allow all SSL. This is insecure, avoid using this method.
* @param allow Allow all SSL true/false
*/
public void setAllowAllSsl(boolean allow)
{
this.allowAllSsl = allow;
}
/**
* Sets to auto redirect on 302 responses
* @param allow Allow redirect true/false
*/
public void setAllowRedirect(boolean allow)
{
this.allowRedirect = allow;
}
/**
* Gets the connection info <b>after</b> a connection request has been made
* @return The connection info, or null
*/
public ConnectionInfo getConnectionInfo()
{
if (executor != null && executor.response != null)
{
return executor.response.getConnectionInfo();
}
return null;
}
}