今天在学习多线程的操作的时候才突然明白了InputStream InputStreamReader BufferedReader这三者的关系
InputStream能从來源处读取一个一个byte,
InputStreamReader一次读取一个一个字符,
BufferedReader一次读取取一行的字符
android为我们提供了方便的方法来操作多线程,通过AsyncTask来操作,AsyncTask是抽象类,要么创建子类继承AsyncTask,要么new AsyncTask之后执行doInBackground方法,覆写AsyncTask的几个方法,AsyncTask
有三个参数,Params,Progress,Result
Params,执行AsyncTask时需要传入的参数
Progress,后台执行时需要显示当前的进度,则使用这个泛型作为进度单位
Result,如果结果需要返回,则用此类型作为返回值的类型
public void ReadURL(String url) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... arg0) {
try {
URL url=new URL(arg0[0]);
URLConnection connection=url.openConnection();
InputStream inputStream=connection.getInputStream();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String line;
StringBuilder builder=new StringBuilder();
while ((line=bufferedReader.readLine())!=null) {
builder.append(line);
}
bufferedReader.close();
inputStreamReader.close();
return builder.toString();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
text.setText(result);
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected void onCancelled(String result) {
// TODO Auto-generated method stub
super.onCancelled(result);
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
}.execute(url);
}