- 浏览: 398641 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (93)
- android(安卓) (23)
- java (40)
- eclipse (4)
- 数据库 (8)
- idea (4)
- web 前端 (5)
- 插件 (1)
- 文件定位 (1)
- 报表 (2)
- excel (1)
- excel合并单元格 (1)
- excel报表 (1)
- hibernate (4)
- Annotation (1)
- ajax (1)
- mysql (13)
- oracle (1)
- openfire (8)
- spring mvc 学习,spring (1)
- get或post请求提交 (2)
- xml (4)
- 二维码 (1)
- 文件流 (1)
- apple (1)
- tomcat (1)
- 文件断点续传 (1)
- java分隔符 (1)
- 集合转换 (1)
- 集合交集 (1)
- spark (4)
- install4j (1)
最新评论
-
18335864773:
可以尝试用一下pageoffice插件生成excel。同样可以 ...
poi设置excel表格边框 -
a1334480360:
楼主你好,我用这种方式,回执消息里面并没有携带接收到消息的ID ...
openfire 消息回执 -
yun9157:
楼主在么? 能否留一个联系方式,我现在需要做消息回执这一块。需 ...
openfire 服务端消息回执添加和响应 -
shendixiong:
efei 写道不知楼主用openfire的时候是否存在丢包的问 ...
openfire 服务端消息回执添加和响应 -
shendixiong:
jxufecs2008 写道楼主,你好,这个消息回执请求和响应 ...
openfire 服务端消息回执添加和响应
android sqlLite 及Adapter 自定义和Adapter 改变UI
- 博客分类:
- android(安卓)
- 数据库
- idea
- java
Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/< 项目文件夹 >/databases/ 下。
另推荐一个网站 http://www.ibm.com/developerworks/cn/opensource/os-cn-sqlite/
上面这篇文章很不错!
我上网找了些资料! 大部分资料是继承SQLiteDatabase,这样相对来说比较麻烦!
下面是sqllite代码
public class SqlListeHelper { private final static String DATABASE_NAME = "test.db"; //数据库名 private final static String TABLE_NAME = "sec_pwd"; //表名 public final static String FIELD_ID = "_id"; //字段名 public final static String FIELD_TITLE = "sec_Title"; //字段名 SQLiteDatabase dba ; Context _context ; /** * android.content.Context 中提供了函数 , 注: Activity 是 Context 的子类 * openOrCreateDatabase () 来创建我们的数据库 *db = context .openOrCreateDatabase(String DATABASE_NAME , int Context. MODE_PRIVATE , null ); *String DATABASE_NAME 数据库的名字 *Int MODE 操作模式 Context.MODE_PRIVATE 等 *CursorFactory 指针工厂 ,本例中传入 null ,暂不用 * @param context */ public SqlListeHelper(Context context) { _context = context; this.dba = _context.openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE, null); createTable(); //获取数据的存储路径 System.out.println("------path["+dba.getPath()+"]--------------"); } /** * 创建表 */ public void createTable() { // TODO Auto-generated method stub String sql = "Create table " + TABLE_NAME + "(" + FIELD_ID + " integer primary key autoincrement," + FIELD_TITLE + " text )"; System.out.println("--------onCreate---------" +sql); try { dba.execSQL(sql); //执行sql语句 无 返回结果 } catch (Exception e) { System.out.println("table already exists (表已存在)"); } } /** * 查询表数据 * @return */ public List select() { String sql = "select * from "+TABLE_NAME +" t where 1=1"; Cursor cursor = dba.rawQuery(sql, new String[]{}); int size = 0; List list= null; UserInfo user = null; if(cursor !=null) size = cursor.getCount(); //获取数据大小 list = new ArrayList(); //将指针移到第一条 cursor.moveToFirst(); //cursor.isAfterLast() 指是否到最后一条 while (!cursor.isAfterLast()){ user = new UserInfo(); user.setId(cursor.getInt(cursor.getColumnIndex(FIELD_ID))); user.setPwd(cursor.getString(cursor.getColumnIndex(FIELD_TITLE))); list.add(user); //移到下条数据 cursor.moveToNext(); } cursor.close(); return list; } public void insert(int id, String Title) { // new Object[]{id,Title}; 类似 key ,value Object[] params = new Object[]{id,Title}; String sql = "insert into " + TABLE_NAME + "("+FIELD_ID+","+FIELD_TITLE+") VALUES(?,?)"; System.out.println("addsql = " + sql); //执行sql语句 this.dba.execSQL(sql,params); } }
注意的是 cursor.getColumnIndex 其实类似字符串中的indexOf 作用 也就是获取字段位置
至于 cursor.getInt () 和 cursor.getString() 我想连
接过数据库的都知道!就不多解释!
大概的就写这两个比较代表性的方法,相对来说,查询比较麻烦点! 而添加与删除和修改差不多!就不多写了!
================== Adapter 的使用 ===============
---------------------------- Adapter 重写 start --------------------------------------------------------
要想更好的使用 Adapter 或者想在listview中更好的添加自己的UI ,用重写 Adapter 就更好不过了
如下代码:
//重写Adapter class MyArrayAdapter extends ArrayAdapter{ private Context _context; private List<UserInfo> item; public MyArrayAdapter(Context context, int textViewResourceId,List _item) { super(context, textViewResourceId); //To change body of overridden methods use File | Settings | File Templates. this.item = _item; this._context = context; } public void add(UserInfo user) { if(user == null) item = new ArrayList(); item.add(user); } @Override public int getCount() { try { if(item == null) return 0; else return item.size(); } catch (Exception e) { return 0; } } @Override public Object getItem(int position) { if(item != null) return item.get(position) ; else return null; } @Override public View getView(int position, View convertView, ViewGroup parent) { View _convertView = convertView; if (convertView == null) { LayoutInflater factory = LayoutInflater.from(_context); final View textEntryView = factory.inflate( R.layout.listview_item, null); _convertView = textEntryView; } UserInfo userInfo = item.get(position); if(userInfo != null){ TextView id_tv = (TextView)_convertView.findViewById(R.id.item_idet); if(id_tv != null) id_tv.setText(userInfo.getId()+""); TextView title_tv =(TextView) _convertView.findViewById(R.id.item_titileet); if(title_tv != null) title_tv.setText(userInfo.getPwd()); } return _convertView; } }
还有,就是在写activity的事实要继承ListActivity 因为这样更加方便使用 Adapter,
注意的是,有的人,习惯了直接用 findViewById(R.id.item_idet),而不是 _convertView.findViewById(R.id.item_idet)
,如果你这样操作,会导致错误产生!出现空!原因就在于你加载的Layout 的xml配置文件!
其他的都好理解,就是怎么使用List集合!
---------------------------- Adapter 重写 end --------------------------------------------------------
---------------------------- Adapter 改变UI start --------------------------------------------------------
我是用sqllite和此demo一起使用的!有数据才方便测试学习!还有在配置文件中,添加的主配置文件中要添加红线部分(内置ID) 如下图:
private SqlListeHelper helper; private static MyArrayAdapter myArrayAdapter = null; setContentView(R.layout.main); //new MyArrayAdapter(this, R.layout.main, getData()) 可以看重写 就知道原因 setListAdapter(new MyArrayAdapter(this, R.layout.main, getData())); myArrayAdapter = (MyArrayAdapter)getListAdapter(); //此处 myArrayAdapter 为全局 方便UI改变 if(myArrayAdapter != null) System.out.println("getCount["+myArrayAdapter.getCount()+"]"); private List<Map<String,Object>> getData(){ List<Map<String,Object>> list = new ArrayList<Map<String, Object>>(); List data = helper.select(); //查询sqllite表中数据 Map userMap = null; if(data == null) return null; return data; }
注意,UI改变的时候要用到Message ,以及handler不然会出现异常,导致系统崩溃!
如下!
Message ms = Message.obtain(updateUIHandler); ms.what = UPDATEUIADAPTER; ms.obj = u; ms.sendToTarget();
//下面最为关键的是 myArrayAdapter.notifyDataSetChanged(); 此行代码 为改变UI关键
Handler updateUIHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case UPDATEUIADAPTER: UserInfo user = (UserInfo)msg.obj; if(user != null && myArrayAdapter != null){ myArrayAdapter.add(user); myArrayAdapter =(MyArrayAdapter) getListAdapter(); myArrayAdapter.notifyDataSetChanged(); } break; default: break; } } } ;
---------------------------- Adapter 改变UI end --------------------------------------------------------
下面例子是我与sqllite一起使用的demo代码!sqllite中代码已经在上面贴出与大家分享!
public class MyActivity extends ListActivity { private final int UPDATEUIADAPTER = 1; private static EditText addEt = null; private static Button addbtn = null; private static Button querybtn = null; private static EditText queryet = null; private static Context _context ; private ListView listView = null; private SimpleAdapter adapter = null ; private static MyArrayAdapter myArrayAdapter = null; private SQLiteDatabase base ; private SqlListeHelper helper; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { _context = this; helper = new SqlListeHelper(_context); // base = helper.getWritableDatabase(); super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = new ListView(_context); // setListAdapter(new MyArrayAdapter(this, R.layout.main, getData())); myArrayAdapter = (MyArrayAdapter)getListAdapter(); if(myArrayAdapter != null) System.out.println("getCount["+myArrayAdapter.getCount()+"]"); addEt = (EditText)findViewById(R.id.addet); queryet = (EditText)findViewById(R.id.queryet); addbtn = (Button)findViewById(R.id.addbtn); querybtn = (Button)findViewById(R.id.querybtn); addbtn.setOnClickListener(addBtnOnClickListener); querybtn.setOnClickListener(queryBtnOnClickListener); } private List<Map<String,Object>> getData(){ List<Map<String,Object>> list = new ArrayList<Map<String, Object>>(); List data = helper.select(); Map userMap = null; if(data == null) return null; return data; } View.OnClickListener addBtnOnClickListener = new View.OnClickListener(){ public void onClick(View view) { Toast.makeText(_context,"你好哈!",Toast.LENGTH_LONG).show(); if(addEt.getText().toString().equals("")) return; else{ String addStr = addEt.getText().toString(); UserInfo u = new UserInfo(); u.setPwd("hi![" + addStr + "]"); u.setId(Integer.parseInt(addStr.trim())); helper.insert(Integer.parseInt(addStr.trim()), "hi![" + addStr + "]"); Message ms = Message.obtain(updateUIHandler); ms.what = UPDATEUIADAPTER; ms.obj = u; ms.sendToTarget(); } } } ; Handler updateUIHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case UPDATEUIADAPTER: UserInfo user = (UserInfo)msg.obj; if(user != null && myArrayAdapter != null){ myArrayAdapter.add(user); myArrayAdapter =(MyArrayAdapter) getListAdapter(); myArrayAdapter.notifyDataSetChanged(); } break; default: break; } } } ; View.OnClickListener queryBtnOnClickListener = new View.OnClickListener(){ public void onClick(View view) { List list = helper.select(); System.out.println("count :"+list.size()); } }; //重写Adapter class MyArrayAdapter extends ArrayAdapter{ private Context _context; private List<UserInfo> item; public MyArrayAdapter(Context context, int textViewResourceId,List _item) { super(context, textViewResourceId); //To change body of overridden methods use File | Settings | File Templates. this.item = _item; this._context = context; } public void add(UserInfo user) { if(user == null) item = new ArrayList(); item.add(user); } @Override public int getCount() { try { if(item == null) return 0; else return item.size(); } catch (Exception e) { return 0; } } @Override public Object getItem(int position) { if(item != null) return item.get(position) ; else return null; } @Override public View getView(int position, View convertView, ViewGroup parent) { View _convertView = convertView; if (convertView == null) { LayoutInflater factory = LayoutInflater.from(_context); final View textEntryView = factory.inflate( R.layout.listview_item, null); _convertView = textEntryView; } UserInfo userInfo = item.get(position); if(userInfo != null){ TextView id_tv = (TextView)_convertView.findViewById(R.id.item_idet); if(id_tv != null) id_tv.setText(userInfo.getId()+""); TextView title_tv =(TextView) _convertView.findViewById(R.id.item_titileet); if(title_tv != null) title_tv.setText(userInfo.getPwd()); } return _convertView; } } }
发表评论
-
install4j 安装spark支持多开问题
2017-06-12 11:40 780在研发spark过程,使用spark作为聊天工具。但是使用 ... -
javaswing jtextpane 英文中文自动换行
2017-04-02 15:01 1845最近一段时间在做一个类似QQ聊天的工具。但是在其中遇到一个问 ... -
java 音频播放
2016-12-29 16:43 506在语音聊天过程需要播放音频,现将播放的代码记录,方便以后浏 ... -
java 音频类型转换(spark聊天)
2016-12-29 16:36 840spark项目中需要实现类似微信的语音聊天功能,主体流程: ... -
java 图片缩小模糊问题
2016-12-28 17:17 2868今天在做emoji表情的时候,需要将原本 40 x 40 的 ... -
spark emoji表情聊天发送
2016-12-28 15:39 1594关于emoji表情发送总体注意: 1.需要对应的标签库以及 ... -
java 切圆图代码(方图切圆图)背景为透明
2016-12-19 09:58 3424public static void main(Strin ... -
http请求解压,解压方法
2015-07-10 10:45 848解压: public static String a ... -
java 文件断点续传
2015-07-10 10:36 1162public static boolean fileUplo ... -
Could not resolve placeholder 'jdbc.driverClassName' in string value "${jdbc.dri
2014-09-17 14:31 25805org.springframework.beans.fac ... -
openfire 自动添加好友
2014-03-07 10:11 2334根据openfire源码的提供,其中Subscription ... -
openfire 服务端消息回执添加和响应
2014-03-07 10:05 9915openfire本身有很多比较好的实现框架,如a ... -
dom4j获取指定节点数据
2014-02-26 17:51 14097现在我有一个xml,如下 String xml = &qu ... -
openfire 消息回执
2014-02-18 18:23 7556参考了: http://blog.csdn.net/t85 ... -
apple 苹果推送
2013-12-26 09:56 1410推送注意点: 1 ... -
post 上传下载文件流
2013-11-21 17:59 9489import java.net.HttpURLConnec ... -
java post xml流
2013-10-31 09:46 2160代码如下: 写道 import java.net ... -
使用jdom将数据转换为xml字符串
2013-10-31 09:35 1330主要依赖于jdom.jar 代码样例: o ... -
hibernate hql 嵌套查询(中间表查询)
2013-10-17 14:55 13429我们在用hibernate时,会在对应的实体加上对应一对多, ... -
hibernate Annotation(注解) 获取 字段名 表名
2013-09-30 14:51 29931.获取表名 /** * * ...
相关推荐
在Android开发中,GridView是一种...总的来说,实现"android GridViewPaging 分页加载数据"需要对Android的UI组件、数据绑定、事件监听和异步处理有深入的理解。合理地运用这些知识,可以构建出流畅且高效的用户界面。
在这个"Android数据库SQLlite操作demo"中,我们将深入探讨如何在Android应用中实现SQLite数据库的使用,特别是涉及到用户注册、登录以及数据的增删查改功能。 首先,让我们来看看如何创建一个简单的用户注册和登录...
6. 使用CursorLoader或LiveData进行数据加载和更新,这可以提高UI的响应性,避免主线程阻塞。 此外,项目可能还包括Adapter类,将数据适配到ListView、RecyclerView等视图组件,以及使用ContentProvider来使数据在...
标题“20120110sqlite”和描述中的“20120110sqlite android”可能指的是一个关于SQLite数据库在2012年1月10日时在Android平台上应用的资料集合。SQLite是一个轻量级的、自包含的、开源的SQL数据库引擎,广泛用于...
在Android UI设计中,ListView通常用于显示大量数据,如通讯录列表。为了将SQLite数据绑定到ListView,我们需要创建一个BaseAdapter的子类,重写其中的方法,如`getView()`。在这个方法里,我们将数据转化为ListView...
通过Adapter(适配器)将数据绑定到ListView中,可以实现动态加载和滚动效果。适配器模式允许我们用各种不同的数据源(如ArrayList、Cursor等)填充ListView,同时支持自定义item视图,实现高度定制化的显示。 2. *...
这些都是Android基础UI组件,它们的使用涉及到Adapter的定制,以及OnItemClickListener的实现。ListView通常与ArrayList结合,用于显示大量可滚动的数据。单选和多选可能通过RadioGroup和CheckBox实现,而下拉框则...
我们可以创建一个自定义的Adapter,继承自`BaseAdapter`,并在`getView()`方法中为每个列表项设置视图。适配器的`getCount()`方法应返回数据库中的总记录数,`getItem()`方法返回对应位置的数据,而`getItemId()`...
在Android应用开发中,数据库是存储和管理数据的重要工具,SQLite是一个轻量级的、开源的、嵌入式的关系型数据库,广泛应用于移动设备。Kotlin作为一种现代的、静态类型的编程语言,已经成为Android开发的首选语言。...
【简易成绩系统】是一个基于SQLite数据库、...综上所述,"简易成绩系统"利用SQLite数据库和Android的ListView及Adapter组件,构建了一个功能完备的学生成绩管理系统,实现了数据的高效管理和用户友好的交互体验。
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。SQLite则是一个轻量级的...这个例子展示了在Android应用中如何有效地展示和操作本地数据,这对于任何Android开发者来说都是一个重要的技能。
3. **Android控件和组件**:`常用控件及组件`可能包括ListView、GridView、RecyclerView等,用于展示节目列表;TextView、ImageView用于展示文字和图片信息;Button用于用户交互,比如设置提醒或者查看节目详情。...
为了在WPF UI上显示这些数据,你可以使用DataGrid控件,并绑定到数据源。例如: ```xml ``` 在后台代码中,你需要设置DataContext: ```csharp this.DataContext = dataSet.Tables["Employees"]; ``` 总结,WPF...