先看看效果:
<span style="font-size:18px;">compile files('libs/activeandroid-3.1-3.jar')</span>
<span style="font-size:18px;"></span><pre style="font-family: 'Source Code Pro'; background-color: rgb(255, 255, 255);"><pre name="code" class="html"><!--ActiveAndrodi创建数据库--> <meta-data android:name="AA_DB_NAME" android:value="troy.db" /> <meta-data android:name="AA_DB_VERSION" android:value="17" />
<span style="font-size:18px;">public class APP extends Application { @Override public void onCreate() { super.onCreate(); ActiveAndroid.initialize(this);//做初始化工作 } @Override public void onTerminate() { super.onTerminate(); ActiveAndroid.dispose();//做清理工作 } }</span>
点击源码先是执行:
<span style="font-size:18px;">public static void dispose() { Cache.dispose(); }</span>
<span style="font-size:18px;"> public static synchronized void dispose() { closeDatabase(); sEntities = null; sModelInfo = null; sDatabaseHelper = null; sIsInitialized = false; Log.v("ActiveAndroid disposed. Call initialize to use library."); }</span>执行了closeDataBase()方法,再看:
<span style="font-size:18px;">public static synchronized void closeDatabase() { sDatabaseHelper.close(); }</span>
<span style="font-size:18px;">private static DatabaseHelper sDatabaseHelper; ..... public final class DatabaseHelper extends SQLiteOpenHelper {} .....</span>
可以看到其实dispose()方法最后执行是关闭SQLiteOpenHelper();
实体类需要继承com.activeandroid.Model类:
@Table(name="Hero" ,id="_id") public class Hero extends Model { @Column(name="name") public String name; @Column(name="type") public String type; @Column(name="power") public int power; public void setName(String name) { this.name = name; } @Override public String toString() { return "Hero{" + "name='" + name + '\'' + ", type='" + type + '\'' + ", power=" + power + '}'; } }
<span style="font-size:18px;">public class MainActivity extends AppCompatActivity { private Button bt; private Button bt2; private Button bt3,bt4; private TextView tv; StringBuilder contentUI=new StringBuilder(""); @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt=(Button)findViewById(R.id.button); bt2=(Button)findViewById(R.id.button2); bt3=(Button)findViewById(R.id.button3); bt4=(Button)findViewById(R.id.button4); tv=(TextView)findViewById(R.id.tv); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { saveData();//保存数据 } }); bt2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { contentUI=showData();//查询数据 Toast.makeText(MainActivity.this,"查询数据ok",Toast.LENGTH_SHORT).show(); tv.setText(contentUI); } }); bt3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { deleteData();//删除数据 } }); bt4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { updateData();//更新数据 } }); } /** * 数据库保存数据 */ private void saveData(){ /*保存数据有两种方式:单挑模式和批量插入模式,批量模式建议使用事务*/ ActiveAndroid.beginTransaction(); try { for (int i=0;i<10;i++){ Hero hero=new Hero(); hero.name="李白"+i; hero.type="诗人"+i; hero.power=i*10; hero.save(); } ActiveAndroid.setTransactionSuccessful(); Toast.makeText(MainActivity.this,"插入数据ok",Toast.LENGTH_SHORT).show(); }catch (Exception e){ e.printStackTrace(); }finally { ActiveAndroid.endTransaction(); } } /** * 数据库查询数据 */ private StringBuilder showData(){ StringBuilder content = new StringBuilder(""); //获取数据库的游标,和SQLite相同 Cursor cursor=ActiveAndroid.getDatabase().query(Cache.getTableName(Hero.class),null,null,null,null,null,null); int nameIndex=cursor.getColumnIndex("name"); int typeIndex=cursor.getColumnIndex("type"); int powerIndex=cursor.getColumnIndex("power"); while (cursor.moveToNext()){ Hero hero=new Hero(); hero.name=cursor.getString(nameIndex); hero.type=cursor.getString(typeIndex); hero.power=cursor.getInt(powerIndex); content.append(hero.toString()); } return content; } /** * 数据库删除数据 */ private void deleteData(){ //Hero.delete(Hero.class,1);//删除id为1的记录 new Delete().from(Hero.class).where("power>?",60).execute();//删除power大于60的所有记录 Toast.makeText(MainActivity.this,"删除数据ok",Toast.LENGTH_SHORT).show(); } /** * 数据库修改数据 */ private void updateData(){ Hero hero=Hero.load(Hero.class,10); /** * load方法其实执行的是: * new Select()).from(type).where(tableInfo.getIdName() + "=?", new Object[]{Long.valueOf(id)}).executeSingle(); * 即是先单条查询; * executeSingle()相当于limit(1); */ hero.setName("杜甫"); hero.save(); Toast.makeText(MainActivity.this,"修改数据ok",Toast.LENGTH_SHORT).show(); } }</span>