我有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
我沒有得到這樣的字段IN欄 - 請在這裏登錄:http://pastebin.com/Jm1cPZYs – TheDevMan
'字段'是數據庫中的列名。你可以嘗試改變它「地址」?可用的字段是[_id,thread_id,地址,人員,日期,協議, read,status,type,reply_path_present,subject,body,service_center,locked] –
嗯。我仍然收到同樣的錯誤。請檢查我的問題更新。讓我知道我做對了嗎? – TheDevMan