- doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
- onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
main方法
class MyAsyncTask extends AsyncTask<String, Integer, String>{
/**
* 代表次线程
*/
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String url = params[0];//字符串数组中的第一个字符串。,,,网络请求的url
//进行网络请求
NetWorkUtils netUtils = new NetWorkUtils();
String str = netUtils.getJsonFromUrl(jsonUrl);
return str;
}
/**
* 代表主线程的代码
*/
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
tv.setText(result);//更新
}
}
NetWorkUtils类
public String getJsonFromUrl(String jsonUrl){
String str = "";
HttpURLConnection urlConn;
InputStream is = null;
try {
URL url = new URL(jsonUrl);
urlConn = (HttpURLConnection) url.openConnection();//开发访问此连接
//设置访问时长和相应时长
urlConn.setConnectTimeout(5*1000);//设置连接时间为5秒
urlConn.setReadTimeout(5*1000);//设置读取时间为5秒
int code = urlConn.getResponseCode();//获得相应码
if(code == 200){//相应成功,获得相应的数据
is = urlConn.getInputStream();//得到数据流(输入流)
byte[] buffer = new byte[1024];
int length = 0;
while((length = is.read(buffer)) > -1){
str += new String(buffer,0,length);
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Log.d("main", str);
return str;
}
}
HttpClient get方法
NetWorkUtils类
public class NetWorkUtils {
public String getJsonHttpClientGet(String jsonUrl){
安卓5.0以后不适用
HttpClient httpClient=new DefaultHttpClient();
HttpGet get=new HttpGet(jsonUrl);
String jsonStr=null;
try {
HttpResponse res = httpClient.execute(get);
if (res.getStatusLine().getStatusCode()==200) {
HttpEntity entity=res.getEntity();
jsonStr=EntityUtils.toString(entity);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonStr;
}
}
MyAsyncTask类
public class MyAsyncTask extends AsyncTask<String, Integer, String>{
private TextView tv;
public MyAsyncTask(TextView tv) {
super();
this.tv = tv;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String baseUrl=params[0];
String channelId =params[1];
String startNum=params[2];
StringBuffer sb=new StringBuffer(baseUrl);
sb.append("?channelId=");
sb.append(channelId);
sb.append("&startNum=");
sb.append(startNum);
String jsonUrl = sb.toString();
String jsonStr=new NetWorkUtils().getJsonHttpClientGet(jsonUrl);
return jsonStr;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
tv.setText(result);
}
}
mainActivity类
public class MainActivity extends Activity {
private TextView tv;
String baseUrl="http://www.93.gov.cn/93app/data.do";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
}
public void startRequest(View view){
new MyAsyncTask(tv).execute(baseUrl,"2","2");
}
}