2012-04-05 111 views
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 
+0

光標是歌廳空嘗試,當你將光標移到使用MoveToNext()NPE。 – 2012-04-05 07:11:16

+0

@PadmaKumar嗨thanx快速回復先生在我檢查後非常第一行創建... – CodingRat 2012-04-05 07:17:22

+0

@PadmaKumar cur = getContentResolver()。查詢(uriSMSURI,null,null,null,null); Log.d(「checking」,「」+ cur); 這裏itslef它給我空值如何解決我是新的問題android – CodingRat 2012-04-05 07:19:02

回答

0

//因爲案件敏感的條件,提起

改變你的收件箱到收件箱

equalsIgnoreCase() 

     { 
      this.readSms("inbox"); 
Log.d("entering into ","inbox"); 
     } 
    } 
    public void readSms(String folder) 
    { 

     if(folder.equals("inbox")) 

uriSMSURI = Uri.parse("content://sms/inbox"); 
} 
+0

非常感謝你帕德馬:) – CodingRat 2012-04-05 07:28:33