1、AsyncTask的使用
首先看一段代码:
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
public ProgressBarAsyncTask() {
super();
}
/**
* 这里的Integer参数对应AsyncTask中的第一个参数,execute传进来的参数
* 这里的String返回值对应AsyncTask的第三个参数
* 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改
* 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
*/
@Override
protected String doInBackground(Integer... params) {
System.out.println("doinbackground::"+params[0]);
//如果需要更新进度条,需要调用publishProgress(value);触发<pre name="code" class="java" style="font-size: 24px; ">onProgressUpdate对UI进行操作
return "doInBackGround返回值"; //返回的值对应onPostExecute的result
} /** * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 */ @Override protected void onPostExecute(String result) {
System.out.println("异步操作执行结束" + result);
}
//该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置,在UI主线程中调用asyncTask.execute(params);触发异步任务,先执行onPreExecute();
@Override
protected void onPreExecute() {
<pre name="code" class="java" style="font-size: 24px; "><span style="white-space:pre"> </span>System.out.println("开始执行异步线程");
} /** * 这里的Intege参数对应AsyncTask中的第二个参数 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作 */ @Override protected void onProgressUpdate(Integer... values) {
int vlaue = values[0];
System.out.println("onProgressUpdate::"+vlaue);
//可以这样更新进度条progressBar.setProgress(vlaue);
}
}
AsyncTask中的doInBackground,onPostExecute,onPreExecute,onProgressUpdate方法都不可以直接调用,通过AsyncTask的execute(values);来触发。它们的执行顺序:execute(params) ---- onPreExecute() ---- doInBackground(params)[params对应execute传入的参数,返回值由onPostExecute接收,调用publishProgress(values)触发onPprogressUpdate(values)更新UI,两者values对应] ----onPostExecute(result)[结束,result对应doInBackground的返回值]
注意点:需要更新的UI可以通过构造方法传进来,务必记住不可以直接调用本身方法,和随便更新 UI,会造成UI堵塞
2、Json解析
使用Android中的JSONObject和JSONArray解析json数据
例子:
String strJson = "{\"students\":[{\"name\":\"Jack\",\"age\":12}, {\"name\":\"Vista\",\"age\":23}, {\"name\":\"Kaka\",\"age\":22}, {\"name\":\"Hony\",\"age\":31}]}";
try {
JSONObject jo = new JSONObject(strJson);
JSONArray jsonArray = (JSONArray) jo.get("students");
for (int i = 0; i < jsonArray.length(); ++i) {
JSONObject o = (JSONObject) jsonArray.get(i);
System.out.println("name:" + o.getString("name") + "," + "age:" + o.getInt("age"));
}
} catch (JSONException e) {
e.printStackTrace();
}