2

私は連絡先の名前とその型を取得しようとしていますが、この例外はコードに記されています。型を追加する前に名前を取得していましたが、今はこのexception.please help.thanksを事前に取得しています。実行時例外無効な列data2?

package application.test; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.os.Bundle; 

import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.Contacts; 
import android.util.Log; 

public class TestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     String[] projection = new String[] { ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME,Phone.TYPE};  

     ContentResolver cr = getContentResolver(); 
     ContentResolver ncr=getContentResolver(); 

     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection,null, null, Contacts.DISPLAY_NAME + " ASC"); 
     Cursor ncur=ncr.query(ContactsContract.Data.CONTENT_URI, projection, null, null,Contacts.DISPLAY_NAME + " ASC"); 
     Cursor icur = cr.query(ContactsContract.RawContacts.CONTENT_URI, projection,null, null, Contacts.DISPLAY_NAME + " ASC"); 

     if (cur.getCount() >0 && ncur.getCount()>0) 
     { 
     while (cur.moveToNext()&& ncur.moveToNext()) 
     { 

    String id = icur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
    String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    String type=ncur.getString(cur.getColumnIndex(Phone.TYPE)) ; 

    if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
    { 


Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 

Cursor typecur = ncr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);    


while (pCur.moveToNext()&& typecur.moveToNext()) 
{ 

       Log.d("names",name); 
       Log.d("types",type); 
       pCur.close(); 
} 
} 
} 
} 
} 
} 
+0

を使用していることを前提とし。親切に答えとしてそれを受け入れる。 – Vinay

答えて

0

プロジェクションでは、Phone.Typeは、照会している連絡先テーブルの一部ではありません。 あなたが何をしようとしているかを詳細に説明してください。

あなたが電話番号のタイプを見ている場合は、データテーブルに

NOTEを照会する必要があります:私は私の答えはあなたを助けている場合は、Androidバージョン2.0 +とない1.5または1.6

+2

連絡先に保存されている名前とそれぞれのタイプ(自宅、仕事、携帯)を取得しようとしています。 – picaso

+0

名前は連絡先テーブルで使用できます。タイプ情報はデータテーブルでのみ使用できます。あなたは情報を得るために3つの異なるテーブルを照会する必要があります。連絡先テーブル、生の連絡先テーブル、およびデータテーブル – Vinay

+0

なぜ生の連絡先テーブル..あなたはこの事をもう少し説明できますか? – picaso

関連する問題