GreenDao 学习笔记 1
来源:互联网 发布:unity3d c 基础教程 编辑:程序博客网 时间:2024/05/21 07:47
简介
就是这样一个简单的效果,可以通过输入框添加记录,点击列表项时则会删除对应的记录。
准备
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 的方法中刷新列表。
0 0
- GreenDao 学习笔记 1
- GreenDao 学习笔记 1
- GreenDao 学习笔记 2
- GreenDao 学习笔记 3
- GreenDao 学习笔记 4
- GreenDao 学习笔记 5
- GreenDao 学习笔记 6
- GreenDao 学习笔记 7
- greenDAO学习笔记
- GreenDAO 学习笔记
- GreenDao学习笔记
- GreenDao学习笔记
- GreenDao笔记(1)—Hello GreenDao
- android开发 greendao学习及使用笔记
- Android数据库框架greenDao学习笔记 2
- GreenDao笔记
- greenDao学习
- GreenDao 学习
- 我的开源夏令营
- 折半查找
- nyoj811变态最大值
- Infobright使用总结
- eclipse javaee版本配置tomcat并向tomcat发布工程
- GreenDao 学习笔记 1
- 数据结构:栈的典型应用之二:四则运算表达式求值(C++)
- 归并排序(java实现)
- Android Intents
- KGTP中增加对GDB命令“set trace-buffer-size”的支持 - Week 8
- 驱动安装中“系统找不到指定的文件”错误的解决方法
- css使用注意点
- A+B for Input-Output Practice (I)
- Linux系统编程——文件的打开与关闭