(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)

1 效果图

(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片

加载数据时

(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片

加载数据完成时

(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片

加载数据异常时


2 实现说明
加载前:界面显示异步加载控件,隐藏数据显示控件,加载异常控件
加载成功:根据加载的数据,初始化数据显示控件
加载失败:显示加载异常的控件,异常异步加载控件

中间的加载过程,通过AsyncTask来实现,在AsyncTask中主要实现两个方法
//后台运行,互联网后台数据加载接口
protected Integer doInBackground(String... params)

//数据加载完成,结合数据,进行UI处理
protected void onPostExecute(Integer result)

3 实现代码

3.1界面部分


加载控件:


复制代码 【(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)】加载失败控件:


复制代码 数据展示控件:
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
View Code

复制代码 3.2后台代码
AsyncTask 类的生成,和调用:
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
View Code
//AsyncTask class AsyncLoader_GuessInfo extends AsyncTask{ @Override protected Integer doInBackground(String... params) { int result=0; try{ //加载数据 if(params[0].length()>0) model= IntegralDataServiceHelper.GetRank(params[0],ProjectConstant.AppID); list= IntegralDataServiceHelper.GetTopList(0, 10,ProjectConstant.AppID); if(list!=null) result=2; } catch(Exception ex){ result=-1; } return result; } @Override//处理界面 protected void onPostExecute(Integer result) { Log.i("ExerciseGuess", "onPostExecute(Result result) called"); if( result==2) LoadAndBandingData(); else { LinearLayout async_begin=(LinearLayout)findViewById(R.id.async_begin); async_begin.setVisibility(View.GONE); LinearLayout async_error=(LinearLayout)findViewById(R.id.async_error); async_error.setVisibility(View.VISIBLE); } } }

调用:new AsyncLoader_GuessInfo().execute(account);


异步界面,重试部分实现

//加载刷新按钮事件 Button but_reflesh=(Button)findViewById(R.id.but_reflesh); but_reflesh.setOnClickListener(newButton.OnClickListener() { public void onClick(View v){ //显示加载的部分 LinearLayout async_begin=(LinearLayout)findViewById(R.id.async_begin); async_begin.setVisibility(View.VISIBLE); //隐藏异步加载失败部分 LinearLayout async_error=(LinearLayout)findViewById(R.id.async_error); async_error.setVisibility(View.GONE); //异步加载 new AsyncLoader_GuessInfo().execute(account); } });

复制代码 界面初始化数据部分:
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
(Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
文章图片
View Code
public void LoadAndBandingData() { LinearLayout async_begin=(LinearLayout)findViewById(R.id.async_begin); async_begin.setVisibility(View.GONE); LinearLayout rl_content=(LinearLayout)findViewById(R.id.rl_content); rl_content.setVisibility(View.VISIBLE); TextView txt_nicename =(TextView)findViewById(R.id.txt_nicename); TextView txt_integral =(TextView)findViewById(R.id.txt_integral); if(model!=null) { txt_nicename.setText(String.valueOf(model.RankNo)+". "+model.UserNiceName); txt_integral.setText("当前的积分:"+String.valueOf(model.IntegralSum)); } else { txt_nicename.setText("当前还没有注册用户!"); txt_integral.setText("当前的积分:0"); }ListView listview =(ListView)findViewById(R.id.listView_ranklist); listview.setAdapter(new RankListAdapter(this, R.layout.sub_ranlist_item,list)); //增加选择事件 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { } });

复制代码

    推荐阅读