2017-06-02 62 views
0

私はSMS送信者の名前を表示する必要があるSMSアプリケーションに取り組んでいます。 たとえば、誰かがメッセージを送信した場合、アプリは電話帳からその名前を確認し、表示されていない場合は表示し、nullまたは空の文字列を表示します。 私はいくつかのコードを試しましたが、取得できませんでした。エラーがあります。ここで電話番号から電話番号を取得 - Android

Exception smsReceiverandroid.database.CursorIndexOutOfBoundsException: After last row. 

はコードです:

String displayName=""; 
       //Resolving the contact name from the contacts. 
       Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(senderNum)); 
       Cursor c = context.getContentResolver().query(lookupUri, new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null); 
       try { 
        c.moveToFirst(); 
        displayName = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        //displayName = c.getString(0); 
        String ContactName = displayName; 
        Log.i("com.azeem.Debug", displayName); 
        Log.i("com.azeem.Debug", ContactName); 
        Toast.makeText(context, ContactName, Toast.LENGTH_LONG).show(); 

       } catch (Exception e) { 
        Log.e("SmsReceiver", "Exception smsReceiver" +e); 
       }finally{ 
        c.close(); 
       } 

senderNum SMSを送信しているその人の数です。 エラーについて教えてください。indexにアクセスできませんが、連絡先の名前を取得するために何ができるのですか。

+0

は、このリンクをたどっます。https://developer.android.com/training/contacts-provider/retrieve-names.html#NameMatch – ashish

+0

は、私はあなたがカーソルのサイズを確認すべきだと思います... –

答えて

1

コードが正常に動作しているかどうかを確認しました。何かを得る前にcursorを確認する必要があります。
ここに私のコードがあります。

Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(senderNum)); 
Cursor c = context.getContentResolver().query(lookupUri, new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null); 
try { 
    if(c.moveToFirst()) { 
     displayName = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     //displayName = c.getString(0); 
     String ContactName = displayName; 
     Log.i("com.azeem.Debug", displayName); 
     Log.i("com.azeem.Debug", ContactName); 
     Toast.makeText(context, ContactName, Toast.LENGTH_LONG).show(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
}finally{ 
    c.close(); 
}