Android:AsyncTask

原创 2015年11月17日 19:12:48
public class MainActivity extends Activity implements OnClickListener {

	private ORMLiteDatabaseHelper mDatabaseHelper;
	private Dao<MyClass, Integer> mClassDao;
	private Dao<Student, Integer> mStudentDao;
	private boolean temp;
	ListView list_view;
	EditText edit;
	Object ob;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		list_view = (ListView) findViewById(R.id.list_view);
		Button create = (Button) findViewById(R.id.create);
		Button query = (Button) findViewById(R.id.query);
		edit = (EditText) findViewById(R.id.edit);

		create.setOnClickListener(this);
		query.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.create:
			temp = true;
			MyAsyncTask mAsyncTask = new MyAsyncTask();
			mAsyncTask.execute();//执行语句

			break;
		case R.id.query:
			Integer id = Integer.parseInt(edit.getText().toString());
			temp = false;
			if (id <= 3 && id >= 1) {
				MyAsyncTask mTask = new MyAsyncTask();
				mTask.execute(id);
			}else{
				Toast.makeText(this, "班级不存在", Toast.LENGTH_SHORT).show();
			}
			break;

		default:
			break;
		}
	}

	public class MyAsyncTask extends AsyncTask {

		public MyAsyncTask() {

		}
		//doInBackground 繁琐事件多数在这里执行处理
		@Override
		protected List<Student> doInBackground(Object... params) {

			if (temp) {
				create();
				return null;
			} else {
				ForeignCollection<Student> student = query((Integer) params[0]);
				List<Student> result = new ArrayList<Student>();
				for (Student stu : student) {
					result.add(stu);
				}
				return result;
			}

		}
	//onPostExecute 可直接设置UI界面
		@Override
		protected void onPostExecute(Object result) {

			if (result == null) {
				Toast.makeText(MainActivity.this, "创建数据库成功", Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(MainActivity.this, "查询成功", Toast.LENGTH_SHORT).show();

				List<Student> list = (List<Student>) result;
				list_view.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, list));
			}
		}
	}

	public void create() {

		mDatabaseHelper = ORMLiteDatabaseHelper.getInstance(this);
		mClassDao = mDatabaseHelper.getClassDao();
		mStudentDao = mDatabaseHelper.getStudentDao();

		for (int i = 1; i < 4; i++) {

			MyClass myclass = new MyClass();

			myclass.myclass_id = i;
			myclass.name = i + "班";

			try {
				mClassDao.createIfNotExists(myclass);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			String[] studentName = { "王二", "张三", "李四", "刘五", "赵六" };
			String[] studentSex = { "男", "女" };
			Random rand = new Random();
			for (int j = 0; j < 5; j++) {

				Student stu = new Student();

				stu.student_id = j;
				stu.name = studentName[rand.nextInt(5)];
				stu.age = 18 + j;
				stu.sex = studentSex[rand.nextInt(2)];

				stu.mclass = myclass;

				try {
					mStudentDao.createIfNotExists(stu);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public ForeignCollection<Student> query(Integer id) {
		try {
			MyClass mclass = mClassDao.queryForId(id);

			ForeignCollection<Student> student = mclass.student;

			return student;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

}

译文:Android中糟糕的AsyncTask之停止AsyncTask操作

译文:Android中糟糕的AsyncTask NOV 8TH, 2014 AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask...
  • u011484134
  • u011484134
  • 2015年10月30日 18:44
  • 1678

AsyncTask的cancel方法并没有停止任务

今天使用LeakCanary,使用AsyncTask模拟一个内存泄漏的情况: onCreate里面调用startAsyncTask(): /** * 模拟一个内存泄漏 AsyncT...
  • nnmmbb
  • nnmmbb
  • 2016年12月15日 13:13
  • 1975

一个例子谈谈AsyncTask的用法

Android前端复习
  • Kaiwii
  • Kaiwii
  • 2014年03月19日 16:51
  • 3965

Android实现弱引用AsyncTask,将内存泄漏置之度外。

AsyncTask可谓是在Android中隐藏很深,曾经叱咤风云的功夫级人物。它的存在让网络和UI的通信变得异常简单和轻松。AsyncTask使用上的简单也得以让很多开发者青睐。一般情况下,Async...
  • u013718120
  • u013718120
  • 2016年11月04日 11:50
  • 2522

安卓开发之消息机制和AsyncTask实现的基本原理

一、基本概述 在Android中,只可以在UiThread(UI主线程)才可以直接更新界面,不然会抛出异常。 WHY: 防止多个线程来修改界面,导致混乱 ...
  • cxmscb
  • cxmscb
  • 2016年07月08日 20:36
  • 1089

android 运用AsyncTask 获取图片并显示

为什么BitmapFactory.decodeByteArray()返回null问题activity_main.xml布局里面一个按钮跟一个imageView...
  • song_shui_lin
  • song_shui_lin
  • 2016年05月07日 00:13
  • 1537

Android AsyncTask 异步任务取消

代码如下: /* * Copyright (c) 2015. 版权归5hand所有 */ package com.example.dell.myapplication; import andr...
  • hu285279904
  • hu285279904
  • 2015年02月08日 19:29
  • 4361

AsyncTask的缺陷和问题

在Android开发中,AsyncTask可以使得用户避免直接使用Thread类和Handler 来处理后台操作,适用于需要异步处理数据并将数据更新到界面上的情况。AsyncTask适用于后台操作只有...
  • goodlixueyong
  • goodlixueyong
  • 2015年05月21日 20:09
  • 17382

Android AsyncTask完全解析,带你从源码的角度彻底理解

我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制。之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制,感兴...
  • sinyu890807
  • sinyu890807
  • 2013年10月11日 08:35
  • 97011

AsyncTask和一个小例子

本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是  继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度...
  • xiangyong_1521
  • xiangyong_1521
  • 2016年01月14日 11:22
  • 692
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android:AsyncTask
举报原因:
原因补充:

(最多只允许输入30个字)