之前我们讲过了AsyncTask 的生命周期(onPreExecute-->doInBackground-->onProgressUpdate-->onPostExecute),今天我们就来写一个模拟AsyncTask获取数据库/网络数据。

三军未动,粮草先行

  mian_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.test1.MainActivity" > <Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点我看数据"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/barNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ListView
android:visibility="gone"
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </LinearLayout>

再创建一个layout Xml -->items.xml  用来填充ListView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/>
<TextView
android:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/>
<TextView
android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_weight="1"
/> </LinearLayout>

Ui线程-MainActivity

public class MainActivity extends Activity {

    private BaseAdapter adapter;
private ListView lv;
private List<User> userlist =new ArrayList<User>();
private MyTask task ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
lv = (ListView) findViewById(R.id.listView1);
btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
lv.setVisibility(View.VISIBLE);
lv.setAdapter(adapter); task = new MyTask(MainActivity.this);
task.execute(userlist,adapter);
}
});
adapter = new BaseAdapter() { @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
View view;
if(convertView==null){
view = inflater.inflate(R.layout.items, null);
}else{
view = convertView;
}
User user = userlist.get(position);
Log.i("userlist", ""+userlist.size()+user);
TextView name = (TextView) view.findViewById(R.id.name);
TextView age = (TextView) view.findViewById(R.id.age);
TextView desc = (TextView) view.findViewById(R.id.desc);
name.setText( user.getName() );
age.setText(user.getAge()+"");
desc.setText(user.getDesc()); return view;
} @Override
public long getItemId(int position) {
return 0;
} @Override
public Object getItem(int position) {
return null;
} @Override
public int getCount() {
return userlist.size();
}
};
}
}

AsyncTask-->MyTask

public class MyTask extends AsyncTask{
private List<User> userlist;
private BaseAdapter adapter;
private MainActivity activity;
private String barNum;
public MyTask(MainActivity activity) {
this.activity = activity;
} @Override
protected Object doInBackground(Object... params) {
userlist = (List<User>) params[0];
adapter = (BaseAdapter) params[1];
for(int i=0 ;i<=100;i++){ try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
userlist.add(new User("zhangsan"+i,18+i,"aa"+i+"aa"));
publishProgress(i);
barNum = i+"%";
}
return userlist;
}
@Override
protected void onProgressUpdate(Object... values) { Button btn = (Button) activity.findViewById(R.id.button1);
btn.setVisibility(View.GONE);
TextView num = (TextView) activity.findViewById(R.id.barNum);
int bar = Integer.parseInt(values[0].toString());
ProgressBar progressBar = (ProgressBar) activity.findViewById(R.id.seekBar1);
progressBar.setProgress(bar);
num.setText(barNum); adapter.notifyDataSetChanged();
} }

Ok,运行看效果:

  

谢谢大家的支持。The human race has one really effective weapon, and that is laughter.

Android AsyncTask异步任务(二)的更多相关文章

  1. android AsyncTask异步下载并更新进度条

    AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...

  2. Android AsyncTask异步加载WebAPI

    之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncT ...

  3. Android --AsyncTask异步任务(一)

    1.为什么要异步任务 Android单线程模式 耗时操作放在非主线程(UI线程)中执行 我们都知道Android是单线程模式,只有主线程才能对UI操作,简称UI线程.当然这样的好处是:保证UI的稳定性 ...

  4. Android AsyncTask 异步任务操作

    1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  5. android AsyncTask异步任务(笔记)

    AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...

  6. Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...

  7. Android:异步处理之AsyncTask的应用(二)

    前言 在上一篇文章中<Android:异步处理之Handler+Thread的应用(一)>,我们知道Android的UI主线程主要负责处理用户的按键事件.用户的触屏事件以及屏幕绘图事件等: ...

  8. Android异步处理二:使用AsyncTask异步更新UI界面

    在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们使用Thread+Handler的方式实现了异步更新UI界面,这一篇中,我们介绍一种更为简 ...

  9. Android 多线程----AsyncTask异步任务详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

随机推荐

  1. 转!!负载均衡器技术Nginx和F5的优缺点对比

    对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器. 目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡 ...

  2. 在VIM中进行快速的查找和替换

    VIM是被誉为非常高效的文本编辑软件.但是掌握并高效的使用是件有难度的事情.在VIM中进行快速的查找和替换是提高VIM使用效率的重要方法.下面是我在阅读VIM用户手册时整理的一些资料: 行内搜索. f ...

  3. Rigidbody相关的操作最好放在FixedUpdate中,update中可能会无效果

    void Turning() { // Create a ray from the mouse cursor on screen in the direction of the camera. Ray ...

  4. 使用vs中的发布功能发布asp.net core项目时遇到ERROR_CERTIFICATE_VALIDATION_FAILED错误

    今天将VS2015编制的一个asp.net core项目发布到服务器进行测试,使用的是vs中主菜单"生成"中的"发布"功能. 遇到了一个错误,在网上反复检索尝试 ...

  5. java中参数传递方式

    在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数.参数可以是对象引用,而 Java ...

  6. Linux下配置IP及安装vmware tool

    =======================CentOS 7以下======================= 配置IP: 1.获得mac地址 2.编辑ifcfg-eth0文件:vi /etc/sy ...

  7. 关于头文件的一些常用<meta>

    一.常见的<meta>(摘自百度) 1. 设置编码信息<meta http-equiv="Content-Type" Content="text/htm ...

  8. Java—多线程编程

    一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程.一个线程不能独立的存 ...

  9. 关于小组所要做的APP的想法

    关于小组所要做的app,我们敲定下来是做关于在线做题的app,但是,纯粹的做题目的app我认为并没有什么大的吸引力,尤其是拿手机做题.所以,我们考虑准备在以下几个方面做功夫以增加吸引力.第一,我们的题 ...

  10. 运行DbVisualizer报the java_home environment viariable does not point to a working 32-bit JDK OR JRE错误

    报这个错误的根本原因就是DbVisualizer和JDK的版本不一致,那么知道原因,修改起来就方便了,要么修改DbVisualizer的版本,要么修改JDK的版本. 1.JDK7 64位 那么就在Db ...