2012-02-28 10 views
0

のために働いていない連絡先に名前を通じて数を取得するにはどうすればリンク this oneマルチ単語列

を試してみましたが、それでも私はエラーを取得していますし、不気味作業します。私は自分のコードを投稿しているので、助けてください。 私はクエリで渡すパラメータについて混乱しています。

iは、以下の方法

void get_Number(String name) 

    { 

     //String name = "Daddy"; 

     String number = null; 
      String args[]= {name}; 


     ContentResolver cr = getContentResolver(); 

     Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       "DISPLAY_NAME = ?", args, null); 

     if (cursor.moveToFirst()) { 

      String contactId = cursor.getString(cursor 
        .getColumnIndex(BaseColumns._ID)); 

      Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID 
        + " = " + contactId, null, null); 
      while (phones.moveToNext()) { 

       number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); 
       int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
       Log.v("TAG3", number); 

      } 
     } 


the problem is in the line 

カーソルカーソル= cr.query(ContactsContract.Contacts.CONTENT_URI、ヌル、 "DISPLAY_NAME =?"、引数、null)を使用しています。

上記の方法は、単一の単語列では有効ですが、マルチワード文字列では機能しません。 連絡先の複数の単語名に対して正しく動作するように修正する方法

the otherway i have tried is 



try 

     { 

      ContentResolver cr = getContentResolver(); 

      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 

      if (cur.getCount() > 0) 

      { 

       while (cur.moveToNext()) 

       { 

        //String iur.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) 
        { 
         if(Name.equalsIgnoreCase(name)) 
         { 
          Cursor tempc= 

          etContentResolver().query(ContactsContract.CommonDataKinds. 
          Phone.CONTENT_URI,new String[] 

          {ContactsContract.CommonDataKinds.Phone.NUMBER}, 
          ContactsContract.CommonDataKinds.Phone._ID+ 
           "="+cur.getString(cur.getColumnIndex 
          (ContactsContract.Contacts._ID)), null,null); 

          tempc.moveToFirst(); 

         //retrieve the phone number 

         number = 
           tempc.getString(cur.getColumnIndex 
           (ContactsContract.PhoneLookup.NUMBER)); 



         } 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

     if(number!=null) 
      txt.append(number + "\n"); 
     else 
     txt.append("No name"); 

問題がif(Name.equalsIgnoreCase(name))句にネストコードです。 私はカーソル変数から数値を取得するさまざまな方法を試みましたが、エラーが表示されています。連絡先に名前が一致する場合は、番号を取得する正しい方法を教えてください。前もって感謝します。

誰かが私は...過去2日間

それをしようとしています助けてください、これはlogcat

2月29日16の出力である:56:04.458:E/CursorWindow(1197):フィールドスロット0、-1に対する要求が正しくありません。 numRowsの数= 1、numColumnsの= 2番目のコードスニペットで1

+0

2番目の方法で次のエラーが表示されます。フィールドスロット1の要求が正しくありません。 numRows = 2、numColumns = 23、この問題の解決策を教えてください – siva

答えて

0

、変更これらの行:

... 
    if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
    { 
     if(Name.equalsIgnoreCase(name)) 
     { 
      Cursor tempc=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone._ID+"="+cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)), null,null); 
      tempc.moveToFirst(); 
      //retrieve the phone number 
      number = tempc.getString(cur.getColumnIndex(ContactsContract.PhoneLookup.NUMBER)); 
     } 
    } 
    else 
     continue; 
... 

EDIT:あなたは、この行のエラーがスローされていることをあなたの質問に語ったよう

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       "DISPLAY_NAME = ?", args, null);  

は、1未満にこの行を変更して試してみてください。

Cursor cursor=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" like '"+args+"'", null,null); 

EDIT - 1:

Cursor tempc=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)), null,null); 
+0

@siva:問題を正しく解決しましたか? – Hiral

+0

あなたの方法は正しい結果を出していませんが、私はあなたの答えを受け入れました。私は今私の答えを掲示するでしょう。しかし、ウルの助けは私にとって貴重です、それはウルの動機によって私はそれを働いたことです... – siva

+0

@siva:それはとても素敵です。しかし、私の答えが完全にあなたのために働かないならば、それを受け入れてはいけません。あなたと同じ問題を抱えている人を誤解させます。あなたの質問への完全な答えは、あなたの答えを掲示し、それを受け入れてください。それは他の人にも役立つでしょう。 :) – Hiral

0
void get_Number(String name) 
{  
     String number = null; 

     String[] args= {name}; 
     ContentResolver cr = getContentResolver(); 
     Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
     "DISPLAY_NAME = ?", args, null); 

      if (cursor.moveToFirst()) { 

      String contactId = cursor.getString(cursor 
        .getColumnIndex(BaseColumns._ID));  
      Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID 
        + " = " + contactId, null, null); 

      while (phones.moveToNext()) { 

       number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); 
       int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
       Log.v("TAG3", number); 
      } 
     }  
     if (number != null) 
      txt.append(number + "\n"); 
     else 
      txt.append("No name");  
    } 

か、他

String where= "DISPLAY_NAME like ?";    
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,  
null, where, new String[]{name}, null); 

people.moveToFirst(); 

try{ 
     String contactId = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID)); 
     String hasPhone = people.getString(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
     if (hasPhone.equalsIgnoreCase("1")) 
       hasPhone = "true"; 
     else 
       hasPhone = "false" ; 
     if (Boolean.parseBoolean(hasPhone)) 
     { 
       Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
       while (phones.moveToNext()) 
       { 
        number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        // mConno.add(position,phoneNumber);  
       } 
       phones.close(); 
     }    
}  
catch(Exception e){ 
} 

if(number!=null) 
    txt.append(number + "\n"); 
else 
    txt.append("No name"); 

それはマルチ単語列のために働いていない理由は、名前全体をとして保存する必要があります最初の名前は、名前と最後の名前に分割しないでください。上記のアプローチの誰かがuのために働くだろう!

関連する問題