2013-01-07 103 views
1

我想訪問收件箱郵件。對於這一點,我寫了下面的代碼:訪問收件箱郵件

Uri uriSMSURI = Uri.parse("content://sms/inbox"); 
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null); 
String sms = ""; 
cur.moveToNext(); 
sms = cur.getString(0); 

但我收到以下錯誤:

01-07 12:31:37.222: E/AndroidRuntime(687): FATAL EXCEPTION: main 
01-07 12:31:37.222: E/AndroidRuntime(687): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.inboxshowingapp/com.example.inboxshowingapp.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.os.Looper.loop(Looper.java:123) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at dalvik.system.NativeStart.main(Native Method) 
01-07 12:31:37.222: E/AndroidRuntime(687): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.database.CursorWrapper.getString(CursorWrapper.java:135) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at com.example.inboxshowingapp.MainActivity.onCreate(MainActivity.java:32) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-07 12:31:37.222: E/AndroidRuntime(687):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
01-07 12:31:37.222: E/AndroidRuntime(687):  ... 11 more 

我怎樣才能解決這個問題呢?

+0

分享您的logcat –

+0

共享logcat..plz赤。 – TheLittleNaruto

+0

請正確縮進它,我已經添加了答案 –

回答

0

首先,您必須確認您已在清單文件中添加權限。

以下權限的消息

android.permission.RECEIVE_SMS 

android.permission.SEND_SMS 

如果是這樣,那麼你缺少也就是說,如果你有一個以上的接觸,哪些檢索所有他們的消息的情況下,那麼你需要塑造你的代碼如下所示:

public List<Sms> getSms() { 
    List<Sms> lstSms = new ArrayList<Sms>(); 
    Sms objSms = new Sms(); 
    Uri message = Uri.parse("content://sms/"); 
    ContentResolver cr = mActivity.getContentResolver(); 

    Cursor c = cr.query(message, null, null, null, null); 
    mActivity.startManagingCursor(c); 
    int totalSMS = c.getCount(); 

    if (c.moveToFirst()) { 
     for (int i = 0; i < totalSMS; i++) { 

      objSms = new Sms(); 
      objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); 
      objSms.setAddress(c.getString(c 
        .getColumnIndexOrThrow("address"))); 
      objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); 
      objSms.setReadState(c.getString(c.getColumnIndex("read"))); 
      objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); 
      if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) { 
       objSms.setFolderName("inbox"); 
      } else { 
       objSms.setFolderName("sent"); 
      } 

      lstSms.add(objSms); 
      c.moveToNext(); 
     } 
    } 
    // else { 
    // throw new RuntimeException("You have no SMS"); 
    // } 
    c.close(); 

    return lstSms; 
} 
+0

如果我想顯示我的消息列表與它的發件人? – TheLittleNaruto

+0

更新後的代碼現在 –

+0

你能解釋你做了什麼嗎? – TheLittleNaruto

0

替換此

cur.moveToNext(); 

與此:

cur.moveToFirst(); 

並將此權限您的清單

<uses-permission android:name="android.permission.READ_SMS" /> 
0
Uri uri = Uri.parse("content://sms/inbox"); 
Cursor c= getContentResolver().query(uri, null, null, null, null); 
startManagingCursor(c); 

獲取所有收件箱的郵件:

body = new String[c.getCount()]; 
number = new String[c.getCount()]; 

if (c.moveToFirst()){ 
    for (int i=0; i<c.getCount(); i++){ 
     body[i] = c.getString(c.getColumnIndexOrThrow("body")).toString(); 
     number[i] = c.getString(c.getColumnIndexOrThrow("address")).toString(); 
     c.moveToNext(); 
    } 
} 
c.close();