2015-05-01 39 views
1

我有20個聯繫人存儲在數組中,我想只檢索那些聯繫人的短信,然後按處理它們?只從SMS數據庫檢索特定的短信

這可能嗎?我的意思是我可以寫where子句來將聯繫人存儲在查詢中,然後檢索如何執行該操作?

或者我應該使用for循環來檢索我的一個一個的SMS?

裏面的循環是這樣的:

Cursor cur = getContentResolver().query(uriSMSURI, null, "from=+14015963069", null,null); 

這將是巨大的,如果有人能指導我這個?

謝謝!

更新:

試過下面按建議:

Uri uriSMSuri = Uri.parse("content://mms-sms/conversations?simple=true"); 
int argcount = 2; // number of IN arguments 
     String[] args = new String[]{ "+14103599690", "+167890" }; 
     StringBuilder inList = new StringBuilder(argcount*2); //for adding the ? 
     for(int i=0;i<argcount;i++) 
     { 
      if (i > 0) 
      { 
       inList.append(","); 
      } 
      inList.append("?"); 
     } 

     cursor = getContentResolver().query(uriSMSuri, new String[] {"*"}, "address IN ("+inList.toString()+")", args, null); 

,但我仍然得到以下日誌錯誤:

05-04 07:35:37.240: E/AndroidRuntime(32662): FATAL EXCEPTION: main 
05-04 07:35:37.240: E/AndroidRuntime(32662): Process: com.ylg.smsapp, PID: 32662 
05-04 07:35:37.240: E/AndroidRuntime(32662): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ylg.smsapp/com.ylg.smsapp.Sms}: android.database.sqlite.SQLiteException: no such column: field (code 1): , while compiling: SELECT * FROM threads WHERE field IN (?,?) ORDER BY date DESC 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread.access$800(ActivityThread.java:151) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.os.Handler.dispatchMessage(Handler.java:102) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.os.Looper.loop(Looper.java:135) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread.main(ActivityThread.java:5254) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at java.lang.reflect.Method.invoke(Native Method) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at java.lang.reflect.Method.invoke(Method.java:372) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
05-04 07:35:37.240: E/AndroidRuntime(32662): Caused by: android.database.sqlite.SQLiteException: no such column: field (code 1): , while compiling: SELECT * FROM threads WHERE field IN (?,?) ORDER BY date DESC 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.content.ContentResolver.query(ContentResolver.java:478) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.content.ContentResolver.query(ContentResolver.java:422) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at com.ylg.smsapp.Sms.onCreate(Sms.java:112) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.Activity.performCreate(Activity.java:5990) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
05-04 07:35:37.240: E/AndroidRuntime(32662): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
05-04 07:35:37.240: E/AndroidRuntime(32662): ... 10 more 

回答

1

您可以嘗試使用 「IN」

String[] args = new String[]{ "+1234576", "+167890" }; 

cursor = contentResolver.query(uriSMSURI, PROJECTION, "address IN (?)", args, null); 
+0

我沒有得到這樣的字段IN欄 - 請在這裏登錄:http://pastebin.com/Jm1cPZYs – TheDevMan

+0

'字段'是數據庫中的列名。你可以嘗試改變它「地址」?可用的字段是[_id,thread_id,地址,人員,日期,協議, read,status,type,reply_path_present,subject,body,service_center,locked] –

+0

嗯。我仍然收到同樣的錯誤。請檢查我的問題更新。讓我知道我做對了嗎? – TheDevMan

1

使用OR條件在WHERE子句數據庫查詢。

+2

能否請你給我一個例子嗎? – TheDevMan