ProgressBar+AsyncTask 实现界面数据异步加载

异步加载数据与异常处理的实现
本文详细介绍了如何使用ProgressBar与AsyncTask在Android应用中实现界面数据的异步加载,包括加载前、成功加载、加载失败时的界面状态变化,并提供了异常处理机制。通过代码示例展示了加载数据的过程及加载成功后的数据展示方式。
ProgressBar+AsyncTask 实现界面数据异步加载



加载数据时



加载数据完成时



加载数据异常时





2 实现说明

加载前:界面显示异步加载控件,隐藏数据显示控件,加载异常控件

加载成功:根据加载的数据,初始化数据显示控件

加载失败:显示加载异常的控件,异常异步加载控件



中间的加载过程,通过AsyncTask来实现,在AsyncTask中主要实现两个方法

//后台运行,互联网后台数据加载接口

protected Integer doInBackground(String... params)



//数据加载完成,结合数据,进行UI处理

protected void onPostExecute(Integer result)



3 实现代码



3.1界面部分


加载控件:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:id="@+id/async_begin" >
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
style="@android:style/Widget.ProgressBar.Small.Inverse"
android:layout_marginRight="5dp" />
<TextView android:text="加载信息中。。。。。"
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:textColor="#000000"
android:layout_height="wrap_content"></TextView>
</LinearLayout>

复制代码

加载失败控件:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="horizontal"
android:id="@+id/async_error"
android:visibility="gone" >
<TextView android:text="网络异常,不能加载数据"
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:textColor="#000000"
android:layout_height="wrap_content"></TextView>
<Button android:text=""
android:id="@+id/but_reflesh"
android:background="@drawable/but_reflesh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>


数据展示控件:

View Code

<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:visibility="gone"
android:id="@+id/rl_content"
android:orientation ="vertical"
android:gravity="center_horizontal"
>
<LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout2" android:layout_width="300px">
<ImageView android:src="@drawable/ranklist_myrank" android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
</LinearLayout>

<RelativeLayout android:background="@drawable/ranklist_itembg" android:layout_height="wrap_content" android:id="@+id/relativeLayout1" android:layout_width="300px">
<LinearLayout android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/line_photo" android:background="@drawable/ranklist_photobg" >
<ImageView android:src="@drawable/ranklist_male" android:id="@+id/ranklist_male" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
</LinearLayout>
<LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linearLayout4" android:layout_toRightOf="@id/line_photo" >
<TextView android:textColor="#000000" android:text="1. xuwenbing" android:id="@+id/txt_nicename" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<TextView android:textColor="#000000" android:text="积分为:1234" android:id="@+id/txt_integral" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

<LinearLayout android:gravity="center_vertical" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linearLayout4" android:layout_alignParentRight="true" >
<ImageView android:src="@drawable/ranklist_goto" android:id="@+id/imageView3" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
</LinearLayout>
</RelativeLayout>

<LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout3" android:layout_width="wrap_content">
<ImageView android:src="@drawable/ranklist_rank_other" android:id="@+id/imageView4" android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>

</LinearLayout>
<LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout5" android:layout_width="300px">
<ListView android:background="@drawable/ranklist_itembg" android:scrollbars="vertical" android:layout_height="300px" android:id="@+id/listView_ranklist" android:layout_width="wrap_content"></ListView>
</LinearLayout>
</LinearLayout>


3.2后台代码

AsyncTask 类的生成,和调用:

View Code

//AsyncTask
class AsyncLoader_GuessInfo extends AsyncTask<String, Void, Integer>{
@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(new Button.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);

}
});


界面初始化数据部分:
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) {
}
});


转自: http://www.cnblogs.com/macroxu-1982/archive/2011/08/11/2135233.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值