121 lines
3.5 KiB
Java
121 lines
3.5 KiB
Java
package org.osmdroid.utils;
|
|
|
|
import android.util.Log;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import okhttp3.OkHttpClient;
|
|
import okhttp3.OkHttpClient.Builder;
|
|
import okhttp3.Request;
|
|
import okhttp3.Response;
|
|
|
|
/**
|
|
* A "very very simple to use" class for performing http get and post requests.
|
|
* So many ways to do that, and potential subtle issues.
|
|
* If complexity should be added to handle even more issues, complexity should be put here and only here.
|
|
* <p>
|
|
* Typical usage:
|
|
* <pre>HttpConnection connection = new HttpConnection();
|
|
* connection.doGet("http://www.google.com");
|
|
* InputStream stream = connection.getStream();
|
|
* if (stream != null) {
|
|
* //use this stream, for buffer reading, or XML SAX parsing, or whatever...
|
|
* }
|
|
* connection.close();</pre>
|
|
*/
|
|
public class HttpConnection {
|
|
private static final int TIMEOUT_CONNECTION = 3000; //ms
|
|
private static final int TIMEOUT_SOCKET = 10000; //ms
|
|
|
|
private static OkHttpClient client;
|
|
private InputStream stream;
|
|
private String mUserAgent;
|
|
private Response response;
|
|
|
|
private static OkHttpClient getOkHttpClient() {
|
|
if (client == null) {
|
|
Builder b = new Builder();
|
|
b.connectTimeout(TIMEOUT_CONNECTION, TimeUnit.MILLISECONDS);
|
|
b.readTimeout(TIMEOUT_SOCKET, TimeUnit.MILLISECONDS);
|
|
client = b.build();
|
|
/*
|
|
client.setConnectTimeout(TIMEOUT_CONNECTION, TimeUnit.MILLISECONDS);
|
|
client.setReadTimeout(TIMEOUT_SOCKET, TimeUnit.MILLISECONDS);
|
|
*/
|
|
}
|
|
return client;
|
|
}
|
|
|
|
public HttpConnection() {
|
|
/*
|
|
client = new OkHttpClient();
|
|
client.setConnectTimeout(TIMEOUT_CONNECTION, TimeUnit.MILLISECONDS);
|
|
client.setReadTimeout(TIMEOUT_SOCKET, TimeUnit.MILLISECONDS);
|
|
*/
|
|
}
|
|
|
|
public void setUserAgent(String userAgent) {
|
|
mUserAgent = userAgent;
|
|
}
|
|
|
|
public void doGet(final String url) {
|
|
try {
|
|
Request.Builder request = new Request.Builder().url(url);
|
|
if (mUserAgent != null)
|
|
request.addHeader("User-Agent", mUserAgent);
|
|
response = getOkHttpClient().newCall(request.build()).execute();
|
|
Integer status = response.code();
|
|
if (status != 200) {
|
|
Log.e(BonusPackHelper.LOG_TAG, "Invalid response from server: " + status.toString());
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return the opened InputStream, or null if creation failed for any reason.
|
|
*/
|
|
public InputStream getStream() {
|
|
if (response == null)
|
|
return null;
|
|
stream = response.body().byteStream();
|
|
return stream;
|
|
}
|
|
|
|
/**
|
|
* @return the whole content as a String, or null if creation failed for any reason.
|
|
*/
|
|
public String getContentAsString() {
|
|
try {
|
|
if (response == null)
|
|
return null;
|
|
return response.body().string();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Calling close once is mandatory.
|
|
*/
|
|
public void close() {
|
|
if (stream != null) {
|
|
try {
|
|
stream.close();
|
|
stream = null;
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
/*
|
|
if (client != null)
|
|
client = null;
|
|
*/
|
|
}
|
|
|
|
}
|