2012-04-30 34 views
0

私は、contactpickerを開くインテントを開始して電話番号にアクセスしようとしています。 私はカーソルを作成しようとするまでうまくいっています。私は連絡先のIDを暴露することができますが、カーソルが初期化された行に、アプリケーションは動作を停止します。Androidカーソルでアプリケーションの強制終了

コード:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     Uri result = null ; 
     switch (requestCode) { 
     case 1001: 
      Bundle extras = data.getExtras(); 
      Set<String> keys = extras.keySet(); 
      Iterator<String> iterate = keys.iterator(); 
      while (iterate.hasNext()) { 
       String key = iterate.next(); 
       l(key + "[" + extras.get(key) + "]"); 
      } 
      result = data.getData(); 
      l("Got a result: "+ result.toString()); 

      break; 
     } 
      String id = result.getLastPathSegment(); 
      l("key:" + id) ; 
//Line with the problems , here the app stops 


      Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, new String[]{id}, null); 

      if(cur.getCount() > 0) { 
       while (cur.moveToNext()) { 
        String idst = cur.getString(
           cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur.getString(
           cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
        //Query phone here. Covered next 
        } 
        } 
      } 
    } else { 

     l("A problem occured"); 
    } 
} 

}

エラー:

04-30 10:42:01.669: E/AndroidRuntime(2819): FATAL EXCEPTION: main 
04-30 10:42:01.669: E/AndroidRuntime(2819): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/3034i335793838dba8dd3/2345 flg=0x1 (has extras) }} to activity {me.Messaging.planner/me.Messaging.planner.MyMessageActivity}: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0xc1c560 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2918) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2970) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread.access$2000(ActivityThread.java:132) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1068) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.os.Looper.loop(Looper.java:150) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread.main(ActivityThread.java:4277) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at dalvik.system.NativeStart.main(Native Method) 
04-30 10:42:01.669: E/AndroidRuntime(2819): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0xc1c560 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:378) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.content.ContentProviderProxy.query(ContentProviderNative.java:414) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.content.ContentResolver.query(ContentResolver.java:264) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at me.Messaging.planner.MyMessageActivity.onActivityResult(MyMessageActivity.java:252) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.Activity.dispatchActivityResult(Activity.java:4108) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2914) 
04-30 10:42:01.669: E/AndroidRuntime(2819):  ... 11 more 
+0

例外を 'logcat'からコピーしてあなたの質問に加えてください。また、選択引数( 'new String [] {id}')は常に実際の選択を伴わなければなりません。 'ContactsContract.Contacts._ID +" =? "' – Jens

+1

ですが、問題は選択引数の配列が緩やかなことです。前のコメントに示されているように選択項目を追加すると、よりうまくいくはずです。 – Jens

+0

実際には、それはもうエラーをスローしません、ありがとう! :) – tb96

答えて

1

だけwhileループの前

cur.moveToFirst() 

を使用します。

+0

いいえ、それは問題を解決しません。 – tb96

関連する問題