由于国内的网络速度不稳定,2g或者3g的网速通常有不能上网的情况,所以在手机端开发时常常会面临怎么处理数据加载显示的问题,如果能够在应用使用过程中让用户感觉不到在等待大量数据的加载将会增强增强软件的使用效果。
在Android开发时,数据列表在初次载入时,如果能够在界面元素显示之时,后台异步地去从服务器获取数据并加载,让用户就不必等待数据的加载过程。
软件的异步加载过程如下:
public class DataListActivity extends ListActivity implements OnScrollListener,OnClickListener{
//定义变量:
ListView listView;
ProgressDialog dialog;
DataProcessTask dataTask = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.datalist);
if(dialog == null)
{
dialog = ProgressDialog.show(ConfirmListActivity.this, "请等待...", "正在加载数据,请稍后...",true);
}
dataTask = new DataProcessTask();
dataTask.execute();
listView = getListView();
listView.setAdapter(adapter);
listView.setOnScrollListener(DataListActivity .this);
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
//定义数据加载方法
public void loadMoreData()
{
//从服务器加载数据下来
}
//更新界面
public void updateUI()
{
//将加载下来的数据更新到界面显示上
}
private class DataProcessTask extends AsyncTask<String, Integer, String>{// 可变长的输入参数,与AsyncTask.exucute()对应
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try{
loadMoreData();
}
catch(Exception e)
{
//Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String result) {//数据下载完毕之后
// TODO Auto-generated method stub
super.onPostExecute(result);
updateUI;
listView.setAdapter(adapter);
if(dialog != null)
dialog.dismiss();
}
}
}