异步请求适用于大文件上传或下载等耗时任务,数据请求更安全可靠,解决了在主线程不能进行网络通信的弊端,从而有效的提高用户体验。以下案例简单明了的模拟了异步请求数据的全部过程。
1)、Activity:
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();// 获取类名
private String urlData = "{\"code\":200,\"time\":\"2016-1-29\",\"sex\":\"男\"}";//模拟服务器数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
//MyApplication.getInstance().addActivity(MainActivity.this);// 将Activity加入到list队列
}
//按钮响应事件
public void button(View v) {
getData();
}
public void getData(){
GetInfo mGetInfo = new GetInfo(this);
mGetInfo.execute(urlData);//开启异步请求
}
/**
* 异步请求类:
* String 传入的参数,一般为url
* Integer 执行过程中的返回的实时进度值
* String doInBackground方法执行完成所返回的数据
* @author 阳光心态
*/
class GetInfo extends AsyncTask<String, Integer, String> {
private Context mContext;
public GetInfo(Context mContext) {
super();
this.mContext = mContext;
}
@Override
protected String doInBackground(String... arg0) {
return Https.getData(arg0[0]);跳转到网络请求类,返回请求结果
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//可直接与主线程进行通信了
Log.e(TAG, "result : " + result);
if (result == null || result == "" || result.equals("false")) {
Toast.makeText(getApplicationContext(), "网络不给力,请检查网络设置!",
Toast.LENGTH_SHORT).show();
} else {
try {
JSONObject object = new JSONObject(result);
int code = object.getInt("code");
if (code == 200) {
String time = object.getString("time");
String sex = object.getString("sex");
Log.e(TAG, "code : " + code);
Log.e(TAG, "time : " + time);
Log.e(TAG, "sex : " + sex);
} else {
Toast.makeText(getApplicationContext(), "服务器出错!",
Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
}
2)、网络请求类Voller:
/**
* 网络请求类
* @author 阳光心态
*
*/
public class Https {
public static String getData(String s) {
if(s==null||s.equals("")){
return "";//网络请求失败
}else{
return s;//请求成功
}
}
}
打印的Log信息: