AsyncTask 异步任务 的用法(并且使用ORMlite关系数据库);
package com.lixu.asynctask; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "users")
public class User {
public User() { } @Override
public String toString() {
return "id" + user_id + "," + ",姓名:" + name + ",年龄:" + age + ",性别:" + sex+",班级是:"+aclass;
} public int getUser_id() {
return user_id;
} public void setUser_id(int user_id) {
this.user_id = user_id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public AClass getAclass() {
return aclass;
} public void setAclass(AClass aclass) {
this.aclass = aclass;
} public User(int user_id, String name, int age, String sex, AClass aclass) {
super();
this.user_id = user_id;
this.name = name;
this.age = age;
this.sex = sex;
this.aclass = aclass;
} @DatabaseField(id=true,columnName = "user_id")
public int user_id; @DatabaseField(columnName = "name")
public String name; @DatabaseField(columnName = "age")
public int age;
@DatabaseField(columnName = "sex")
public String sex;
@DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true)
public AClass aclass; }
package com.lixu.asynctask; import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "classes")
public class AClass { public AClass(long id, String name, ForeignCollection<User> user) {
super();
this.id = id;
this.name = name;
this.user = user;
} @Override
public String toString() {
return "id" + id + "班级名:" + name;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public ForeignCollection<User> getUser() {
return user;
} public void setUser(ForeignCollection<User> user) {
this.user = user;
} @DatabaseField(id = true)
public long id; @DatabaseField(dataType = DataType.STRING)
public String name; @ForeignCollectionField(eager = false)
public ForeignCollection<User> user = null; public AClass() { } }
package com.lixu.asynctask; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log; public class MyORMlite extends OrmLiteSqliteOpenHelper {
private static String DATABASENAME = "lixu.db";
private static int DATABASEVERSION = 1; private static MyORMlite mMyORMlite = null;
private Dao<User, Integer> muserDao = null;
private Dao<AClass, Integer> mclassDao = null; public MyORMlite(Context context, String databaseName, CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
} public static MyORMlite getInstance(Context context) {
if (mMyORMlite == null) {
mMyORMlite = new MyORMlite(context, DATABASENAME, null, DATABASEVERSION);
}
return mMyORMlite; } @Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { try {
TableUtils.createTableIfNotExists(arg1, User.class);
TableUtils.createTableIfNotExists(arg1, AClass.class);
Log.d("MyORMlite", "被创建");
} catch (Exception e) {
e.printStackTrace();
}
} public Dao<User, Integer> getuserDao() {
if (muserDao == null) {
try {
muserDao = getDao(User.class);
} catch (Exception e) {
e.printStackTrace();
}
}
return muserDao;
} public Dao<AClass, Integer> getclassDao() {
if (mclassDao == null) {
try {
mclassDao = getDao(AClass.class);
} catch (Exception e) {
e.printStackTrace();
}
}
return mclassDao;
} @Override
public void close() {
super.close();
muserDao = null;
mclassDao = null; } @Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { } }
package com.lixu.asynctask; import java.sql.SQLException;
import java.util.List; import com.j256.ormlite.dao.Dao;
import com.lixu.asynctask.AClass;
import com.lixu.asynctask.User;
import com.lixu.asynctask.MyORMlite; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private Dao<User, Integer> muserDao = null;
private Dao<AClass, Integer> mclassDao = null;
TextView tv;
StringBuffer sb = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); MyORMlite mMyORMlite = MyORMlite.getInstance(this);
muserDao = mMyORMlite.getuserDao();
mclassDao = mMyORMlite.getclassDao(); tv = (TextView) findViewById(R.id.tv);
tv.setMovementMethod(ScrollingMovementMethod.getInstance()); Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyTask mMyTask = new MyTask();
mMyTask.execute();
}
});
} // 用一个类继承AsyncTask
private class MyTask extends AsyncTask {
// 先执行这个方法 可以处理一些初始化的事件等。
@Override
protected void onPreExecute() {
sb = new StringBuffer();
super.onPreExecute();
} // 这个方法可以处理相对耗时较长的任务,这个方法里面不可以执行ui任务。
@Override
protected Object doInBackground(Object... params) {
add();
List<User> list = chaxun();
for (User n : list) {
sb.append("姓名是:" + n.getName() + ",性别是:" + n.getSex() + ",班级是:" + n.getAclass().getName() + "\n");
}
return sb;
} // 可以将上一个方法处理的结果传到这个方法中,并且这个方法里面可以处理ui任务。
@Override
protected void onPostExecute(Object params) {
super.onPostExecute(params);
tv.setText(params.toString());
Toast.makeText(MainActivity.this, "显示成功", 0).show();
}
} public List<User> chaxun() {
List<User> list = null;
try {
list = muserDao.queryForAll(); } catch (SQLException e) {
e.printStackTrace();
}
return list; } public void add() { for (int j = 1; j <= 3; j++) {
AClass classes = null;
classes = new AClass();
classes.setName("大三" + j + "班");
classes.setId(j);
try {
mclassDao.createIfNotExists(classes);
} catch (SQLException e) {
e.printStackTrace();
}
for (int i = 10 * (j - 1) + 1; i <= 10 * j; i++) {
User user = new User();
user.setName("张三" + i);
user.setAge(20 + i);
user.setUser_id(i);
user.setSex("男");
user.setAclass(classes);// 挂载到class
try {
muserDao.createIfNotExists(user);
} catch (SQLException e) {
e.printStackTrace();
} }
} }
}
AsyncTask 异步任务 的用法(并且使用ORMlite关系数据库);的更多相关文章
- Android线程管理之AsyncTask异步任务
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
- AsyncTask异步交互和httpurlconnection结合使用
//网络请求数据 package com.baidu.myutils; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- Android多线程分析之五:使用AsyncTask异步下载图像
Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...
- 使用AsyncTask异步更新UI界面及原理分析
概述: AsyncTask是在Android SDK 1.5之后推出的一个方便编写后台线程与UI线程交互的辅助类.AsyncTask的内部实现是一个线程池,所有提交的异步任务都会在这个线程池中的工作线 ...
- Android 多线程----AsyncTask异步任务详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- android AsyncTask异步下载并更新进度条
AsyncTask异步下载并更新进度条 //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...
- Android中使用Thread线程与AsyncTask异步任务的区别
最近和几个朋友交流Android开发中的网络下载问题时,谈到了用Thread开启下载线程时会产生的Bug,其实直接用子线程开启下载任务的确是很Low的做法,那么原因究竟如何,而比较高大上的做法是怎样? ...
- Android异步处理系列文章四篇之二 使用AsyncTask异步更新UI界面
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ...
- Android使用AsyncTask异步线程网络通信获取数据(get json)
摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...
随机推荐
- 【运行错误】Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
代码如下: <html> <head> <script> /*window.frames[]可以通过下标或名称访问单独的frame*/ window.onload= ...
- Makefile使用总结【转】
1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之 ...
- IntelliJ-IDEA和Git、GitHub、Gitlab的使用
一.基本入门 1.IntelliJ-IDEA预装的版本控制介绍 我们来看IntelliJ-IDEA的版本控制设置区域 打开File>Settings>Version Control 可以 ...
- POJ 3667 Hotel(线段树+区间合并)
http://poj.org/problem?id=3667 题意: 有N个房间,M次操作.有两种操作(1)"1a",表示找到连续的长度为a的空房间,如果有多解,优先左边的,即表示 ...
- Sublime Text 3.1.1 Build 3176 注册码破解
在hosts(C:\Windows\System32\drivers\etc)加入如下内容: 127.0.0.1 www.sublimetext.com127.0.0.1 li ...
- [ogre]ogre::Animation
参考:http://blog.csdn.net/leonwei/article/details/5819248 http://blog.csdn.net/debugconsole/article/de ...
- 使用Fragment适应不同屏幕和分辨率
Fragment是Android3.0后增加的新控件,有点类似于Activity组件,也是用来承载各种View元素.Google增加这个 玩意的目的是为了平板电脑里面可以复用部分显示的View,只要写 ...
- Codeforces 918D - MADMAX
918D - MADMAX 思路: dp+记忆化搜索 状态:dp[i][j][w]表示先手在i节点,后手在j节点,这一轮的字母为w的结果,如果为true,则表示先手必赢,否则后手必赢. 状态转移:如果 ...
- LeetCode--121--卖卖股票的最佳时机
问题描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出 ...
- Sasha and Interesting Fact from Graph Theory CodeForces - 1109D (图论,计数,Caylay定理)
大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m 枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点 拓展$Caylay$定理 $n$个有标号节点生成k ...