4月1日 android 记录
2014-04-01 21:16
337 查看
第一:
昨天没解决的问题:ListView和cursor.close()问题。
问题的背景:使用cursor获得所有列表项(SQL的select语句),然后使用
SimpleCursorAdapter作为适配器,再使用ListView,将列表结果显示出来。最
后关闭cursor。
问题的原因:使用listView(adapter)语句之后使用cursor.close(),结果
并不会显示列表。这是因为cursor相当于MVC模型的controler,而ListView相当
于View,如果在listview之后使用cursor.close,相当于把数据源给关闭了,所以
不能显示。
但是如果不用cursor.close(),在退出程序后会抛出异常(Finalize),提示
DatabaseObjectNotClosedException。这就变得很矛盾了。
解决方法:在finalize()里抛出异常,等程序退出时用垃圾清理器收集。即:
@Override
protected void finalize() throws Throwable {
cursor.close();
super.finalize();
}
第二:
使用sms发送短信时提示:
Sending sms message:user 10039 does not have android.permission.SEND_SMS。
问题分析:
很明显是在manifest文件里没有声明权限。其实自己有声明的,但是写成了:
<users-permission android:name="android.permission.SEND_SMS" />。
仔细看了才发现,写错字了,应该是uses而不是users,即
<uses-permission android:name="android.permission.SEND_SMS" />。
另一个sms发短信的问题:
sendTextMessage NullPointerException
问题分析:
网络的大神们给出了一个解释:使用sendTextMessage方法发短信,如果参数里
短信实体太长,就会报这个错误。这是android本身的一个BUG。
解决方法:
使用ArrayList<String> list = smsManager.divideMessage(text);
将短信内容text分为几部分。然后用一个for循环将几截内容依次发出去。
示例:
ArrayList<String> list = smsManager.divideMessage(text);
for(String str:list)
{
smsManager.sendTextMessage(phoneNumString, null, str, null, null);
}
要发送短信,关键代码是:
(1)SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器
(2)ArrayList<String> list = manager.divideMessage(String txt); //拆分长短信
(3)manager.sendTextMessage(String phone,null,String content,null,null); //发送短信
第三:
打开两个模拟器:
第一个可以在eclipse中run as → android application打开,默认号码是5554。
第二个的打开方法:打开命令输入窗口CMD,用命令进入SDK所在的目录,进入tools文件夹,输入
emulator -data foo,回车,就可以打开第二个模拟器了,一般号码是5556。这时就用两个模拟器
互相发短信了。
昨天没解决的问题:ListView和cursor.close()问题。
问题的背景:使用cursor获得所有列表项(SQL的select语句),然后使用
SimpleCursorAdapter作为适配器,再使用ListView,将列表结果显示出来。最
后关闭cursor。
问题的原因:使用listView(adapter)语句之后使用cursor.close(),结果
并不会显示列表。这是因为cursor相当于MVC模型的controler,而ListView相当
于View,如果在listview之后使用cursor.close,相当于把数据源给关闭了,所以
不能显示。
但是如果不用cursor.close(),在退出程序后会抛出异常(Finalize),提示
DatabaseObjectNotClosedException。这就变得很矛盾了。
解决方法:在finalize()里抛出异常,等程序退出时用垃圾清理器收集。即:
@Override
protected void finalize() throws Throwable {
cursor.close();
super.finalize();
}
第二:
使用sms发送短信时提示:
Sending sms message:user 10039 does not have android.permission.SEND_SMS。
问题分析:
很明显是在manifest文件里没有声明权限。其实自己有声明的,但是写成了:
<users-permission android:name="android.permission.SEND_SMS" />。
仔细看了才发现,写错字了,应该是uses而不是users,即
<uses-permission android:name="android.permission.SEND_SMS" />。
另一个sms发短信的问题:
sendTextMessage NullPointerException
问题分析:
网络的大神们给出了一个解释:使用sendTextMessage方法发短信,如果参数里
短信实体太长,就会报这个错误。这是android本身的一个BUG。
解决方法:
使用ArrayList<String> list = smsManager.divideMessage(text);
将短信内容text分为几部分。然后用一个for循环将几截内容依次发出去。
示例:
ArrayList<String> list = smsManager.divideMessage(text);
for(String str:list)
{
smsManager.sendTextMessage(phoneNumString, null, str, null, null);
}
要发送短信,关键代码是:
(1)SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器
(2)ArrayList<String> list = manager.divideMessage(String txt); //拆分长短信
(3)manager.sendTextMessage(String phone,null,String content,null,null); //发送短信
第三:
打开两个模拟器:
第一个可以在eclipse中run as → android application打开,默认号码是5554。
第二个的打开方法:打开命令输入窗口CMD,用命令进入SDK所在的目录,进入tools文件夹,输入
emulator -data foo,回车,就可以打开第二个模拟器了,一般号码是5556。这时就用两个模拟器
互相发短信了。
相关文章推荐
- Android多线程
- Android 学习笔记15:task和back stack
- listview设置item点击背景色
- Android 笔记2
- android Bitmap学习总结
- Android之自学笔记(二)
- Android应用开发入门篇-拼图游戏
- 2013年度Q4季度及全年热门Android机型排行榜
- Android之自学笔记(一)
- Android四大组件之Service浅见
- Android Android.mk
- Android Webservice 开发总结
- Android LocalBroadcastManager
- [置顶] android 获取apk信息
- Android Webservices 返回多行多列数据(Dataset)
- Android apk 的安装过程
- Android HandlerThread
- Android中集结了大量的系统管家Manager
- Android SparseArray
- FFmpeg的Android平台移植—编译篇