2011-02-25 2 views
3
나는 문제가 여기

는 얻기 연락 전화 번호

02-24 19:40:42.772: ERROR/CursorWindow(21467): Bad request for field slot 0,-1. numRows = 1, numColumns = 24 

말 연락처 전화 번호, 나는 로그 고양이에 오류가 점점 계속을 얻는 데

import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.util.Log; 
import android.view.View; 
import android.widget.ListView; 
import android.widget.Button; 
import android.widget.SimpleCursorAdapter; 
import android.os.Bundle; 


public class Contacts extends Activity { 

private ListView mContactList; 
private Button mAddContact; 
private boolean mShowInvisible = false; 
boolean set; 
public String name = ""; 
public String id; 
public String phone; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.contact_listview); 

    mContactList = (ListView) findViewById(R.id.contactList); 
    mAddContact = (Button) findViewById(R.id.addContactButton); 

    mAddContact.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      Intent i = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(i,1); 
     } 

    }); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if(resultCode == RESULT_OK){   
     getContactData(data); 
     } 
    } 

    public void getContactData(Intent data){ 

    ContentResolver cr = getContentResolver(); 

    Uri contactData = data.getData(); 
    Log.v("Contact", contactData.toString()); 
    Cursor c = managedQuery(contactData,null,null,null,null); 

    if(c.moveToFirst()){ 
      id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
     Log.v("Contact", "ID: " + id.toString()); 
      name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     Log.v("Contact", "Name: " + name.toString()); 

     if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
       Cursor pCur = cr.query(Phone.CONTENT_URI,null,Phone.CONTACT_ID +" = ?", new String[]{id}, null); 

      while(pCur.moveToNext()){ 
       phone = c.getString(c.getColumnIndex(Phone.NUMBER)); 
       Log.v("getting phone number", "Phone Number: " + phone); 
      } 
     } 

    } 

} 

모든 때까지 잘 읽어 내 코드입니다 전화 번호를 얻으려는 지점

답변

0

내가 그것을 가지고, 내가 while 루프를 꺼내서 난 이제 숫자 벌금을 얻을

+0

코드와 동일하게 사용했지만 필드 슬롯 0, -1에 대한 잘못된 요청과 같은 오류가 발생했습니다. numRows = 1, numColumns = 23 – Karthik

0

"moveToNext()"를 호출하기 전에 커서를 재설정해야합니다. 그냥 "pCur.moveToFirst();"를 호출하십시오. 잠시 전에. 도움이 될 것입니다.

5

그것은하면 안입니다

while(pCur.moveToNext()){ 
    phone = pCur.getString(pCur.getColumnIndex(Phone.NUMBER)); 
    Log.v("getting phone number", "Phone Number: " + phone); 
} 

, pCur 대신 연락처를 보유하고있는 'C'커서?

+0

심지어 while 루프 전에() pCur.moveToFirst에 넣어 후에는 어떤 이유로 동안 실행하지 않기 때문에 확실하지 않다 – tyczj

+0

이 방법은 나를 위해 작동합니다. – leonsas