android开发基础问题汇总及注意事项

这两天在做安卓的实验,开发一个简单的具有增删改查功能的app。将所碰到的问题汇总下,以备遗忘

1.SQLite的使用

1.1 打开或创建数据库

SQLiteDatabase db = openOrCreateDatabase("demo.db", Context.MODE_PRIVATE, null);

MODE_PRIVATE为默认操作模式,代表该文件是私有数据,只能被应用本身访问,而且写入的内容会覆盖原文件的内容。相应的有MODE_APPEND(检查文件是否存在,存在就往文件追加内容,否则就创建新文件)、WORLD_READABLE(表示当前文件可以被其他应用读取)、WORLD_WRITEABLE(表示当前文件可以被其他应用写入)。

第二种方式:

SQLiteDatabase db = openDatabase("demo.db", null, SQLiteDatabase.OPEN_READWRITE, null);

第二个参数为factory工厂模式,第三个参数为数据库的打开模式,上面是可读可写,相应的还有OPEN_READONLY(只读方式)、CREATE_IF_NECESSARY(不存在数据库时创建数据库)。

1.2 建表以及增、删、改、查数据库

建表:

db.execSQL("Create table if not exists UserTb(uid integer primary key autoincrement, uname String)");   

上述语句是创建一个UseTb的表,包含uid(integer类型)与uname(String)两列。uid为主键,autoincrement为自动编号,默认从1开始,每条新记录增加1。

数据库插入语句(增):

db.execSQL("Insert into UserTb(uname) values (?)", new Object[]{username});

上述语句是向UserTb表中的uname列插入变量username的值。

数据库删除语句:

db.execSQL("Delete from UserTb where uname='"+username+"'");
上述语句是删除UserTb表中的包含uname列username变量值的记录。( 注意where子句的等号后面有单引号,不然会 SQLiteLog (1) no such Column 报错

数据库更新语句(改):

db.execSQL("Update UserTb set uname='" + username + "' where uid=1");

上述语句是更新UserTb表中uid为1的uname,值改为变量username的值。

数据库查询语句:

Cursor cr = db.query("UserTb",null,"uid<?",new String[]{String.valueOf(100)},null,null,null);

查询需要用到Cursor(游标),普通的execSQL()用于查询语句将返回void,使用Cursor将返回一个游标数组,然后操作游标来进行取值。

cr.moveToPosition(i);      //移动到i位置,boolean类型
cr.moveToFirst();       //移动到第一条记录

cr2.getCount();       //游标结果集的总记录条数
cr2.getInt(int columnIndex);         //根据列索引获得int类型值
cr2.getString(int columnIndex);   //根据列索引获取String类型值

模糊查询:

Cursor cr = mdb.rawQuery("Select * from MovieTb where moviename like '%"+movie_name+"%'",null);
然后操作游标取值,在此不做赘述。

2. 报错提醒

2.1 CursorIndexOutOfBoundsException: Index <?> requested, with a size of <?>

字面意思即游标索引越界,什么原因呢,很多时候是由于你Cursor结果集操作的时候没有moveToPosition()等移动游标位置,根据情况使用moveToNext()等方法操作游标即可。

2.2 SQLiteLog(1) no such Column:<?>

这种错误是由于没有找到这个列,很多时候是忘了加单引号"'"。

3 一些小问题

3.1 设置android软键盘默认不弹出

第一种 AndroidManifest.xml文件在相应Activity设置如下:

activity android:windowSoftInputMode = "stateAlwaysHidden | adjustPan"

stateAlwaysHidden是表示默认在该Activity中隐藏不弹出,adjustPan是Activity的主窗口不会调整屏幕的大小而留出软键盘的空间。

第二种 java代码的OnCreate()中插入代码:

getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

3.2 设置android中EditText文本不居中

使用android:gravity属性进行设置,例如:

android:gravity="top|left"    //表示左上角显示


猜你喜欢

转载自blog.csdn.net/Leesoar521yt/article/details/80752984