新手求助——Android 短信备份问题

Scott-Su 2014-08-16 05:30:18

/**
* 备份短信
*/
public void backupSms() {
new Thread()
{
public void run()
{
//SystemSms是自定义的用于保存系统格式短信的类
//getAllSystemSms用于获取系统所有的短信
List<SystemSms> infos =getAllSystemSms();
System.out.println(infos);
File dir = new File(Environment.getExternalStorageDirectory(), "/phoneGuard/backup");
if(!dir.exists())
{
dir.mkdirs();
}
File file = new File(Environment.getExternalStorageDirectory() + "/phoneGuard/backup/smsbackup.xml");

//创建一个xml的序列化器
XmlSerializer xmlSerializer = Xml.newSerializer();
try
{
FileOutputStream fos = new FileOutputStream(file);
//设置写xml的编码
xmlSerializer.setOutput(fos, "utf-8");
xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "smss");
for(SystemSms info : infos)
{
xmlSerializer.startTag(null, "sms");

xmlSerializer.startTag(null, "id");
xmlSerializer.text(info.getId());
xmlSerializer.endTag(null, "id");

xmlSerializer.startTag(null, "address");
xmlSerializer.text(info.getAddress());
xmlSerializer.endTag(null, "address");

xmlSerializer.startTag(null, "date");
xmlSerializer.text(info.getDate());
xmlSerializer.endTag(null, "date");

xmlSerializer.startTag(null, "type");
xmlSerializer.text(info.getType() + "");
xmlSerializer.endTag(null, "type");

xmlSerializer.startTag(null, "body");
xmlSerializer.text(info.getBody());
xmlSerializer.endTag(null, "body");

xmlSerializer.endTag(null, "sms");
}
xmlSerializer.endTag(null, "smss");
xmlSerializer.endDocument();

fos.flush();
fos.close();

//在子线程里面是不能弹出一个Toast的,因为子线程里面没有Looper,
//但我们通过下面几个步骤就可以在子线程里面弹出Toast了
// Looper.prepare();//创建一个Looper
//Toast.makeText(context, "备份成功", Toast.LENGTH_SHORT).show();
// Looper.loop();//轮循一次Loope
System.out.println("备份成功");
}
catch (Exception e)
{
// Looper.prepare();//创建一个Looper
//Toast.makeText(context, "备份失败", Toast.LENGTH_SHORT).show();
//Looper.loop();//轮循一次Looper
e.printStackTrace();
System.out.println("备份失败");
}
}
}.start();
}



为什么会备份失败呢?
...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 版主 2014-09-26
  • 打赏
  • 举报
回复
看异常 文件找不到 要么你没有申请读SD卡的权限 要么就是你根本就没有这个xml文件。
十三邵 2014-09-26
  • 打赏
  • 举报
回复
引用 楼主 u010659693 的回复:

/**
	 * 备份短信
	 */
	public void backupSms() {
        new Thread()
        {
                public void run() 
                {
                		//SystemSms是自定义的用于保存系统格式短信的类
                		//getAllSystemSms用于获取系统所有的短信
                        List<SystemSms> infos =getAllSystemSms();
                        System.out.println(infos);
                        File dir = new File(Environment.getExternalStorageDirectory(), "/phoneGuard/backup");
                        if(!dir.exists())
                        {
                                dir.mkdirs();
                        }
                        File file = new File(Environment.getExternalStorageDirectory() + "/phoneGuard/backup/smsbackup.xml");
                        
                        //创建一个xml的序列化器
                        XmlSerializer xmlSerializer = Xml.newSerializer();
                        try
                        {
                                FileOutputStream fos = new FileOutputStream(file);
                                //设置写xml的编码
                                xmlSerializer.setOutput(fos, "utf-8");
                                xmlSerializer.startDocument("utf-8", true);
                                xmlSerializer.startTag(null, "smss");
                                for(SystemSms info : infos)
                                {
                                        xmlSerializer.startTag(null, "sms");
                                        
                                        xmlSerializer.startTag(null, "id");
                                        xmlSerializer.text(info.getId());
                                        xmlSerializer.endTag(null, "id");
                                        
                                        xmlSerializer.startTag(null, "address");
                                        xmlSerializer.text(info.getAddress());
                                        xmlSerializer.endTag(null, "address");
                                        
                                        xmlSerializer.startTag(null, "date");
                                        xmlSerializer.text(info.getDate());
                                        xmlSerializer.endTag(null, "date");
                                        
                                        xmlSerializer.startTag(null, "type");
                                        xmlSerializer.text(info.getType() + "");
                                        xmlSerializer.endTag(null, "type");
                                        
                                        xmlSerializer.startTag(null, "body");
                                        xmlSerializer.text(info.getBody());
                                        xmlSerializer.endTag(null, "body");
                                        
                                        xmlSerializer.endTag(null, "sms");
                                }
                                xmlSerializer.endTag(null, "smss");
                                xmlSerializer.endDocument();
                                
                                fos.flush();
                                fos.close();
                                
                                //在子线程里面是不能弹出一个Toast的,因为子线程里面没有Looper,
                                //但我们通过下面几个步骤就可以在子线程里面弹出Toast了
                               // Looper.prepare();//创建一个Looper
                                //Toast.makeText(context, "备份成功", Toast.LENGTH_SHORT).show();
                              //  Looper.loop();//轮循一次Loope
                                System.out.println("备份成功");
                        }
                        catch (Exception e)
                        {
                               // Looper.prepare();//创建一个Looper
                                //Toast.makeText(context, "备份失败", Toast.LENGTH_SHORT).show();
                                //Looper.loop();//轮循一次Looper
                                e.printStackTrace();
				System.out.println("备份失败");
                        }
                }
        }.start();
	}
为什么会备份失败呢?
我也不知道,帮你顶一下吧。。。

80,358

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧