AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
String path = "http://v.juhe.cn/toutiao/index?type=top&key=597b4f9dcb50e051fd725a9ec54d6653";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = connection.getInputStream();
String json = streamToString(inputStream,"utf-8");
//json字符串已经获取到,,,也就是异步任务执行的结果获取到了
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
//返回的数据可以解析
}
};
//调用
asyncTask.execute();
}
/**
* 这里面是展示异步任务的所有方法
*/
private void asyncAll() {
//需要一个异步任务对象....在异步任务中去处理耗时的操作,比如获取网络...是放在子线程中(后台线程中)
/**
* 有三个泛型参数...这三个泛型参数都可以为空...Void
* Params 一般值得是执行任务的时候传递过来的数据,,,,一般是访问的url,,,可以为空Void
* Progress 当前这个任务执行的进度...如果需要的话一般是Integer,,,,不需要为空Void
* Result 异步任务执行完成以后返回的结果,,,如果没有结果Void,,,如果有指定返回值的泛型,一般访问网络返回的是json字符串...String
*/
AsyncTask<String, Void, String> asyncTask = new AsyncTask<String, Void, String>() {
//在doInBackground之前调用的方法,,,也就是异步任务开始执行的第一个方法
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//在后台执行的方法....相当于子线程...执行耗时的操作...不能再这个方法里面更新界面
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = connection.getInputStream();
//publishProgress();
String json = streamToString(inputStream,"utf-8");
//json字符串已经获取到,,,也就是异步任务执行的结果获取到了
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//异步任务执行进度发生改变的时候调用的方法,,,这个方法不会自动调用,,需要在doInBackGroud里面调用publishProgress()方法的时候会调用onProgressUpdate
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
//发送任务执行的结果到主线程,,,,这个方法是处于主线程,,,可以更新界面
//String json就是doInBackground返回的数据
@Override
protected void onPostExecute(String json) {
//json是doInBackgroud返回的,,,此时在这里可以进行解析,,设置适配器的操作
Log.i("-json---",json);
}
//异步任务取消的时候执行的方法...asyncTask.cancel(true);执行的时候会自动执行onCancelled
@Override
protected void onCancelled() {
super.onCancelled();
}
};
//异步任务对象如果需要执行,需要调用下面的方法.....
asyncTask.execute("http://v.juhe.cn/toutiao/index?type=top&key=597b4f9dcb50e051fd725a9ec54d6653");
//asyncTask.cancel(true);
}
private String streamToString(InputStream inputStream,String charset) {
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
StringBuilder builder = new StringBuilder();
while ((s = bufferedReader.readLine()) != null){
builder.append(s);
}
bufferedReader.close();
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected String doInBackground(Void... voids) {
String path = "http://v.juhe.cn/toutiao/index?type=top&key=597b4f9dcb50e051fd725a9ec54d6653";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = connection.getInputStream();
String json = streamToString(inputStream,"utf-8");
//json字符串已经获取到,,,也就是异步任务执行的结果获取到了
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
//返回的数据可以解析
}
};
//调用
asyncTask.execute();
}
/**
* 这里面是展示异步任务的所有方法
*/
private void asyncAll() {
//需要一个异步任务对象....在异步任务中去处理耗时的操作,比如获取网络...是放在子线程中(后台线程中)
/**
* 有三个泛型参数...这三个泛型参数都可以为空...Void
* Params 一般值得是执行任务的时候传递过来的数据,,,,一般是访问的url,,,可以为空Void
* Progress 当前这个任务执行的进度...如果需要的话一般是Integer,,,,不需要为空Void
* Result 异步任务执行完成以后返回的结果,,,如果没有结果Void,,,如果有指定返回值的泛型,一般访问网络返回的是json字符串...String
*/
AsyncTask<String, Void, String> asyncTask = new AsyncTask<String, Void, String>() {
//在doInBackground之前调用的方法,,,也就是异步任务开始执行的第一个方法
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//在后台执行的方法....相当于子线程...执行耗时的操作...不能再这个方法里面更新界面
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = connection.getInputStream();
//publishProgress();
String json = streamToString(inputStream,"utf-8");
//json字符串已经获取到,,,也就是异步任务执行的结果获取到了
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//异步任务执行进度发生改变的时候调用的方法,,,这个方法不会自动调用,,需要在doInBackGroud里面调用publishProgress()方法的时候会调用onProgressUpdate
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
//发送任务执行的结果到主线程,,,,这个方法是处于主线程,,,可以更新界面
//String json就是doInBackground返回的数据
@Override
protected void onPostExecute(String json) {
//json是doInBackgroud返回的,,,此时在这里可以进行解析,,设置适配器的操作
Log.i("-json---",json);
}
//异步任务取消的时候执行的方法...asyncTask.cancel(true);执行的时候会自动执行onCancelled
@Override
protected void onCancelled() {
super.onCancelled();
}
};
//异步任务对象如果需要执行,需要调用下面的方法.....
asyncTask.execute("http://v.juhe.cn/toutiao/index?type=top&key=597b4f9dcb50e051fd725a9ec54d6653");
//asyncTask.cancel(true);
}
private String streamToString(InputStream inputStream,String charset) {
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
StringBuilder builder = new StringBuilder();
while ((s = bufferedReader.readLine()) != null){
builder.append(s);
}
bufferedReader.close();
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}