您的位置:首页 > 移动开发 > Android开发

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。这时就用两个模拟器

互相发短信了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: