private static NetworkUtil instance;
public static NetworkUtil getInstance() {
//线程1 线程2
if (instance == null) {
synchronized (NetworkUtil.class) {
if (instance == null) {
instance = new NetworkUtil();
}
}
}
return instance;
}
public interface NetCallback<T> {
//泛型
void onSuccess(T o);
void onFail(String msg);
}
@SuppressLint("StaticFieldLeak")
public void getRequest3(String apiUrl, final Class clazzBean, final NetCallback callback) {
//接口回调
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return getRequest2(strings[0], clazzBean);
}
@Override
protected void onPostExecute(Object o) {
//2 调用相对应的方法通过到外面
if (o == null) {
callback.onFail("请求失败");
} else {
callback.onSuccess(o);
}
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, apiUrl);
}
public <T> T getRequest2(String apiUrl, Class clazzBean) {
//泛型
Object obj = null;
String result = getRequest(apiUrl);
obj = new Gson().fromJson(result, clazzBean);
return (T) obj;
}
public String getRequest(String apiUrl) {//执行网络请求
String result = "";
try {
URL url = new URL(apiUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
//网络通信最少有两个端: A B,它们之间通信(交换数据)是通过I/O流来进行的:InputStream/OutputStream
result = stream2String(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private String stream2String(InputStream inputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
stringBuilder.append(tmp);
}
return stringBuilder.toString();
}