0
嗨,我正在閱讀使用服務的收件箱,但即時獲取空指針異常,當我創建光標讀取收件箱先前我能夠讀取短信與相同的代碼現在我想存儲這些短信到SD卡中的xml文件,但我得到一個空指針異常。任何幫助將不勝感激。 我的代碼是在這裏無法讀取短信收件箱
// 在這裏輸入的代碼
public class CreateBackupXml extends Service
{
CreateBackup createBackup = null;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate(Bundle savedinstance)
{
Log.d("service","inside on create of service");
}
public void onDestroy()
{
}
public void onStart(Intent intent, int startid)
{
Toast.makeText(this, "Creating Back up", Toast.LENGTH_LONG).show();
Log.d("animation", "animation should be Start");
createBackup = new CreateBackup();
createBackup.createXml("all");
}
public class CreateBackup
{
Uri uriSMSURI = Uri.parse("");
Cursor cur=null;
public void createXml(String choice)
{
if(choice=="all")
{
this.readSms("Inbox");
}
}
public void readSms(String folder)
{
if(folder.equals("inbox"))
{
uriSMSURI = Uri.parse("content://sms/inbox");
}
else if(folder.equals("sent"))
{
uriSMSURI = Uri.parse("content://sms/sent");
}
try{
Log.d("folder","inside of inbox");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
Log.d("checking","1111111111111");
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Log.d("checking","2222222222");
Document document = documentBuilder.newDocument();
Log.d("checking","333333333333");
Element rootElement = document.createElement("SMSBackUp");
Log.d("checking","444444444");
rootElement.setAttribute("category", folder);
Log.d("checking","5555555555");
rootElement.setAttribute("owener", "gaurav");
Log.d("checking","6666666666");
cur = getContentResolver().query(uriSMSURI, null, null, null,null);
Log.d("checking",""+cur);
Log.d("checking","7777777777777");
while (cur.moveToNext())
{
Log.d("checking","88888888");
Element smsElement = document.createElement("sms");
rootElement.appendChild(smsElement);
Element text = document.createElement("text");
smsElement.appendChild(text);
text.appendChild(document.createTextNode(cur.getString(11)));
Element phonenoElement = document.createElement("number");
smsElement.appendChild(phonenoElement);
phonenoElement.appendChild(document.createTextNode(cur.getString(2)));
Element nameElement = document.createElement("author");
smsElement.appendChild(nameElement);
nameElement.appendChild(document.createTextNode(getContact(cur.getString(2))));
}
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
Properties outFormat = new Properties();
outFormat.setProperty(OutputKeys.INDENT, "yes");
outFormat.setProperty(OutputKeys.METHOD, "xml");
outFormat.setProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
outFormat.setProperty(OutputKeys.VERSION, "1.0");
outFormat.setProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperties(outFormat);
DOMSource domSource = new DOMSource(document.getDocumentElement());
OutputStream output = new ByteArrayOutputStream();
StreamResult result = new StreamResult(output);
String xmlString = output.toString();
Log.d("output xml",xmlString);
}
catch(Exception e)
{
Log.e("execption ","can not create back up" +e);
}
}
private String getContact(String number)
{
Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
String returnName= "";
if(cur.getCount() > 0)
{
while(cur.moveToNext())
{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
Log.d("Contact","ID:" + id);
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d("Contact","name:" + name);
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pcur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.NUMBER + "=?",new String[]{number},null);
int numindex = pcur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
if(pcur.moveToFirst())
{
String dbNum = pcur.getString(numindex);
if(dbNum.equals(number))
{
returnName = name;
Log.d("number","number:" + dbNum);
}
else
{
Log.d("number","numbers dont match!");
}
}
else
{
Log.d("number", "no result");
}
}
else
{
Log.d("number", "No Number");
}
}
}
return returnName;
}
}
}
logcat的觀點
04-05 12:00:07.770: D/reading sms(456): inside of create backup for inbox
04-05 12:00:07.830: D/animation(456): animation should be Start
04-05 12:00:07.830: D/folder(456): inside of inbox
04-05 12:00:07.858: D/checking(456): 1111111111111
04-05 12:00:07.860: D/checking(456): 2222222222
04-05 12:00:07.881: D/checking(456): 333333333333
04-05 12:00:07.890: D/checking(456): 444444444
04-05 12:00:07.920: D/checking(456): 5555555555
04-05 12:00:07.920: D/checking(456): 6666666666
04-05 12:00:07.920: D/checking(456): null
04-05 12:00:07.920: D/checking(456): 7777777777777
04-05 12:00:07.920: E/execption(456): can not create back upjava.lang.NullPointerException
光標是歌廳空嘗試,當你將光標移到使用MoveToNext()NPE。 – 2012-04-05 07:11:16
@PadmaKumar嗨thanx快速回復先生在我檢查後非常第一行創建... – CodingRat 2012-04-05 07:17:22
@PadmaKumar cur = getContentResolver()。查詢(uriSMSURI,null,null,null,null); Log.d(「checking」,「」+ cur); 這裏itslef它給我空值如何解決我是新的問題android – CodingRat 2012-04-05 07:19:02