在xml文件中提取Sms

时间:2014-03-06 08:51:16

标签: android

     //checksms returning list sms
private ArrayList<Sms> checkSms() {
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cur = getActivity().getContentResolver().query(uriSMSURI, null, null, null, null);
while (cur.moveToNext()) 
{
newSms.setsender(cur.getString(cur.getColumnIndex("address")));
myList.add(newSms);
}   
createXml();
return (myList);
}

//这里是createXml methode

private void createXml() {
File newxmlfile = new File(Environment.getExternalStorageDirectory()+ "/SmsFile.xml");
try
{Log.v(BackupFragment.this.getClass().getName(), "create file:" +  newxmlfile.createNewFile());} 
catch (IOException e)
{Log.e("IOException", "exception in createNewFile() method");}
FileOutputStream fileos = null;
try 
{fileos = new FileOutputStream(newxmlfile);}
catch (FileNotFoundException e) 
{Log.e("FileNotFoundException", "can't create FileOutputStream");}
XmlSerializer serializer = Xml.newSerializer();
try {
serializer.setOutput(fileos, "UTF-8");
serializer.startDocument(null, Boolean.valueOf(true));
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",true);
serializer.startTag("", "Document");
for(int i = 0 ; i < myList.size(); i++) {
serializer.startTag("", "sms");
serializer.startTag(null, "sender");
serializer.text(newSms.getsender());
serializer.endTag(null, "sender");          
serializer.endTag("", "sms");
}           
serializer.endTag("", "Document");
serializer.endDocument();
serializer.flush();
fileos.close();
} catch (Exception e) {
Log.e("Exception", "error occurred while creating xml file");
}
}   

结果错了

它没有返回我想要的正确结果 它只是重复相同的错误号码“44225627565” 而且我不知道te问题在哪里

1 个答案:

答案 0 :(得分:0)

你想要迭代myList,你在这里做什么:

for(int i = 0 ; i < myList.size(); i++) {
    serializer.startTag("", "sms");
    serializer.startTag(null, "sender");
    serializer.text(newSms.getsender());  <----
    serializer.endTag(null, "sender");          
    serializer.endTag("", "sms");
}

但您使用newSms.getsender()来接收号码。 谁负责获得总是相同的数字。
相反,您应该使用:myList.get(i).getsender()或myList包含的任何内容
修改
您还可以在列表中插入相同的对象:

newSms.setsender(cur.getString(cur.getColumnIndex("address")));
myList.add(newSms);

您应始终创建一个新对象以插入:

Sms tmp = new Sms();
tmp.setsender(cur.getString(cur.getColumnIndex("address")));
myList.add(tmp);