在android和java.lang.IllegalStateException中获取联系电话
Posted
技术标签:
【中文标题】在android和java.lang.IllegalStateException中获取联系电话【英文标题】:Getting contact number in android and java.lang.IllegalStateException 【发布时间】:2013-08-13 19:07:27 【问题描述】:我尝试获取联系电话和姓名。我的名字是正确的,但是当我尝试获取数字时,我得到了错误。
这里是代码:
public void onActivityResult(int reqCode, int resultCode, Intent data)
super.onActivityResult(reqCode, resultCode, data);
ArrayList<String> contactList = new ArrayList<String>();
switch (reqCode)
case (0):
if (resultCode == Activity.RESULT_OK)
Uri contactData = data.getData();
Cursor c = getContentResolver().query(contactData, null, null,
null, null);
if (c.moveToFirst())
String name = c
.getString(c
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phoneNumber = c.getString(c
.getColumnIndex(Phone.NUMBER));
String contact = name + "" + phoneNumber;
contactList.add(contact);
break;
这里是 logCat:
08-12 16:25:19.790: E/WindowManager(14381): Activity tr.com.turkcell.shmobile.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@421c0090 that was originally added here
08-12 16:25:19.790: E/WindowManager(14381): android.view.WindowLeaked: Activity tr.com.turkcell.shmobile.MainActivity 已泄露窗口 com.android.internal.policy.impl.PhoneWindow$最初在这里添加的 DecorView@421c0090 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.ViewRootImpl.(ViewRootImpl.java:374) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.Window$LocalWindowManager.addView(Window.java:549) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.Dialog.show(Dialog.java:277) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.ProgressDialog.show(ProgressDialog.java:116) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.ProgressDialog.show(ProgressDialog.java:99) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.ProgressDialog.show(ProgressDialog.java:94) 08-12 16:25:19.790: E/WindowManager(14381): at tr.com.turkcell.shmobile.MainActivity$GetProduts.onPreExecute(MainActivity.java:188) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.os.AsyncTask.execute(AsyncTask.java:534) 08-12 16:25:19.790: E/WindowManager(14381): at tr.com.turkcell.shmobile.MainActivity$1$1.run(MainActivity.java:59) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.Activity.runOnUiThread(Activity.java:4591) 08-12 16:25:19.790: E/WindowManager(14381): at tr.com.turkcell.shmobile.MainActivity$1.onClick(MainActivity.java:56) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.View.performClick(View.java:4084) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.view.View$PerformClick.run(View.java:16966) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.os.Handler.handleCallback(Handler.java:615) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.os.Handler.dispatchMessage(Handler.java:92) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.os.Looper.loop(Looper.java:137) 08-12 16:25:19.790: E/WindowManager(14381): 在 android.app.ActivityThread.main(ActivityThread.java:4754) 08-12 16:25:19.790: E/WindowManager(14381): 在 java.lang.reflect.Method.invokeNative(Native Method) 08-12 16:25:19.790: E/WindowManager(14381): 在 java.lang.reflect.Method.invoke(Method.java:511) 08-12 16:25:19.790: E/WindowManager(14381): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 08-12 16:25:19.790: E/WindowManager(14381): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 08-12 16:25:19.790: E/WindowManager(14381): at dalvik.system.NativeStart.main(Native Method) 08-12 16:25:21.370:E/CursorWindow(14381):无法从具有 1 行 29 列的 CursorWindow 读取第 0 行第 -1 列。 08-12 16:25:21.370: D/AndroidRuntime(14381): 关闭 VM 08-12 16:25:21.370: W/dalvikvm(14381): threadid=1: 线程以未捕获的异常退出 (group=0x41b6a318) 08-12 16:25:21.380:E/AndroidRuntime(14381):致命异常:主要 08-12 16:25:21.380: E/AndroidRuntime(14381): java.lang.RuntimeException: 传递结果失败 ResultInfowho=null, request=0, result=-1, data=Intent dat=content:// com.android.contacts/contacts/lookup/209i1510398b8e8d8617/1 flg=0x1 到活动 tr.com.turkcell.shmobile/tr.com.turkcell.shmobile.IndexActivity:java.lang.IllegalStateException:无法读取第 0 行,来自 CursorWindow 的 col -1。确保在从光标访问数据之前正确初始化光标。 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3150) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:3193) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread.access$1100(ActivityThread.java:130) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.os.Handler.dispatchMessage(Handler.java:99) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.os.Looper.loop(Looper.java:137) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread.main(ActivityThread.java:4754) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 java.lang.reflect.Method.invokeNative(Native Method) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 java.lang.reflect.Method.invoke(Method.java:511) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 08-12 16:25:21.380: E/AndroidRuntime(14381): at dalvik.system.NativeStart.main(Native Method) 08-12 16:25:21.380:E/AndroidRuntime(14381):原因:java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行,列 -1。确保在从光标访问数据之前正确初始化光标。 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.database.CursorWindow.nativeGetString(Native Method) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.database.CursorWindow.getString(CursorWindow.java:434) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.database.CursorWrapper.getString(CursorWrapper.java:114) 08-12 16:25:21.380: E/AndroidRuntime(14381): at tr.com.turkcell.shmobile.IndexActivity.onActivityResult(IndexActivity.java:85) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.Activity.dispatchActivityResult(Activity.java:5192) 08-12 16:25:21.380: E/AndroidRuntime(14381): 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3146) 08-12 16:25:21.380: E/AndroidRuntime(14381): ... 11 更多 08-12 16:25:21.410: D/dalvikvm(14381): GC_CONCURRENT freed 2769K, 32% free 6571K/9543K, paused 2ms+4ms,总共37ms
【问题讨论】:
你遇到了什么错误? 每个联系人都有号码吗?是NPE
吗?
是的,每个联系人都有一个号码
拜托,如果不是 NPE,那它是什么?
İllegalStateException !!
【参考方案1】:
您需要 2 个光标来获取联系号码,为什么? .. 假设一个联系人有多个号码,你会怎么做:)? ....所以你需要一个光标来浏览联系人和一个光标来浏览联系人号码的......就像@Piyush所说的那样
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, projection, selection, null, sortOrder);
while(cursor.moveToNext())//this loops through contacts and put them in object ContactTest which i already made
ContactTest c1 = new ContactTest();
c1.setContactName(cursor.getString(/*name index*/));
c1.setContactID(cursor.getString(/*id index you will need it*/));
Cursor pCursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] c1.getContactID(), null);
while(pCursor.moveToNext()) // this loops through the contact number's
c1.setContactPhone(pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
【讨论】:
以上是关于在android和java.lang.IllegalStateException中获取联系电话的主要内容,如果未能解决你的问题,请参考以下文章
为啥android项目输出在Android模拟器和硬件设备中不同
skia项目运行在Android.4.2,Android 4.2和Android 2.2有区别吗?
Android Webview 在三星和 Android 11 上崩溃
Android 如何在 android 本地通知中添加视频和 GIF?