GreenDao 学习笔记 1
2014-09-06 17:23
477 查看
简介
就是这样一个简单的效果,可以通过输入框添加记录,点击列表项时则会删除对应的记录。准备
https://github.com/greenrobot/greenDAO到这里下载其中的 DaoExample 子项目,并运行。
我另外写了个 Activity ,实践下 GreenDao 的基本运用。
代码和分析
listview_item.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center_vertical" android:textSize="18dp" android:paddingLeft="8dp"/>
listView 的项,就是一个 TextView。
ListViewAdapter.java
public class ListViewAdapter extends BaseAdapter { private List<Note> noteList = new ArrayList<Note>(); private LayoutInflater layoutInflater; public ListViewAdapter(Activity activity) { layoutInflater = activity.getLayoutInflater(); } @Override public int getCount() { return noteList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = (TextView) layoutInflater.inflate(R.layout.listview_item, parent, false); String text = noteList.get(position).getText(); textView.setText(text); return textView; } public List<Note> getNoteList(){ return noteList; } }
my_activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <EditText android:id="@+id/etNote" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent"/> <Button android:id="@+id/btnAdd" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="添加"/> </LinearLayout> <ListView android:id="@+id/lvNote" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout>一个输入框,一个按钮,一个列表。
MyActivity.java
public class MyActivity extends Activity implements View.OnClickListener, AdapterView.OnItemClickListener { private EditText etNote; private SQLiteDatabase db; private NoteDao noteDao; private ListViewAdapter listViewAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); etNote = (EditText) findViewById(R.id.etNote); findViewById(R.id.btnAdd).setOnClickListener(this); DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null); db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession(); noteDao = daoSession.getNoteDao(); ListView listView = (ListView) findViewById(R.id.lvNote); listViewAdapter = new ListViewAdapter(this); listView.setAdapter(listViewAdapter); listView.setOnItemClickListener(this); refreshListView(); } @Override public void onClick(View v) { String text = etNote.getText().toString(); if (!text.equals("")) { Note note = new Note(null, text, null, null); noteDao.insert(note); refreshListView(); } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Long keyToDelete = listViewAdapter.getNoteList().get(position).getId(); noteDao.deleteByKey(keyToDelete); refreshListView(); } private void refreshListView() { List<Note> dataFromDb = getDataFromDb(); List<Note> listViewData = listViewAdapter.getNoteList(); listViewData.clear(); listViewData.addAll(dataFromDb); listViewAdapter.notifyDataSetChanged(); } private List<Note> getDataFromDb() { Cursor cursor = db.query(noteDao.getTablename(), noteDao.getAllColumns(), null, null, null, null, null); List<Note> noteList = new ArrayList<Note>(); while (cursor.moveToNext()) { Long id = (cursor.getLong(cursor.getColumnIndex(NoteDao.Properties.Id.columnName))); String text = (cursor.getString(cursor.getColumnIndex(NoteDao.Properties.Text.columnName))); Note note = new Note(id, text, null, null); noteList.add(note); } return noteList; } }
这样一来,对 GreenDao 就算有了个初步的印象了。
但还是有些问题:
1. 我没有看到 db.close 或 cursor.close 的语句,是不需要吗?
2. 操作数据库应该是开启 worker 线程的,使用 NoteDao 时曾抛出异常:
不能在非 UI 线程修改 UI,这真是很奇怪的事情,我又不可能在 NoteDao 的方法中刷新列表。
相关文章推荐
- GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
- GreenDao 3.0 学习笔记(一)
- GreenDAO 学习笔记-小白教程(二)使用单例类来管理DaoSession
- GreenDao 学习笔记 6
- GreenDao 学习笔记 2
- SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之GreenDao详解
- IBatis.Net学习笔记三--两种常用的DAO
- GreenSock动画平台学习笔记(二)TweenMax
- GreenSock动画平台学习笔记(三)TimelineLite
- GreenSock动画平台学习笔记(4)LoaderMax-ImageLoader
- j2ee学习笔记——初试ssh之泛型通用dao(转)
- GreenSock动画平台学习笔记(一)TweenLite
- 《Spring3.X企业应用开发实战》学习笔记--DAO和事务
- GreenSock动画平台学习笔记(一)TweenLite
- GreenDao笔记
- greenDaoMaster的学习研究
- DAO学习笔记 2
- Hibernate Dao的使用 Hibernate学习笔记(二)
- GreenSock动画平台学习笔记(5)Loadermax-SWFLoader
- Android greenDao的学习总结