Buscar foto de contacto en Android da nulo

Quiero obtener la foto del contacto mientras un usuario ingresa el número. Al usar el número de teléfono obtengo el nombre del usuario pero para la imagen se muestra nulo.

mi código está siguiendo:

public class NewtempActivity extends Activity {

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

        final ImageView img = (ImageView) findViewById(R.id.imageView1);
        final EditText edit = (EditText) findViewById(R.id.editText1);
        TextView txt = (TextView) findViewById(R.id.textView1);
        Button btn = (Button) findViewById(R.id.button1);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Girish", "Clicked");

                String name = getContactNameFromNumber(edit.getText()
                        .toString(), getApplicationContext());
                img.setImageBitmap(BitmapFactory
                        .decodeFile(ContactsContract.PhoneLookup._ID));
                Log.d("Girish",
                        ""
                                + (BitmapFactory
                                        .decodeFile(ContactsContract.PhoneLookup._ID)));
                Toast.makeText(getApplicationContext(), name, name.length())
                        .show();
            }
        });
    }

    public String getContactNameFromNumber(String number, Context ctx) {
        /*
         * // define the columns I want the query to return String[] projection
         * = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,
         * ContactsContract.PhoneLookup.NUMBER, };
         */
        // encode the phone number and build the filter URI
        Uri contactUri = Uri.withAppendedPath(
                ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
                Uri.encode(number));

        // query time
        // Cursor c = ctx.getContentResolver().query( contactUri, projection,
        // null,
        Cursor c = ctx.getContentResolver().query(contactUri, null, null, null,
                null);

        // if the query returns 1 or more results
        // return the first result
        if (c.moveToFirst()) {
            String name = c.getString(c
                    .getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));

            return name;
        }

        // return the original number if no match was found
        return number;
    }

    public static Bitmap loadContactPhoto(ContentResolver cr, long id) {
        Uri uri = ContentUris.withAppendedId(
                ContactsContract.Contacts.CONTENT_URI, id);
        InputStream input = ContactsContract.Contacts
                .openContactPhotoInputStream(cr, uri);
        // InputStream input = ContactsContract.Contacts.Photo
        if (input == null) {
            return null;
        }
        return BitmapFactory.decodeStream(input);
    }

    public InputStream openPhoto(long contactId) {
        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,
                contactId);
        Uri photoUri = Uri.withAppendedPath(contactUri,
                Contacts.Photo.CONTENT_DIRECTORY);
        Cursor cursor = getContentResolver().query(photoUri, null, null, null,
                null);
        if (cursor == null) {
            return null;
        }
        try {
            if (cursor.moveToFirst()) {
                byte[] data = cursor.getBlob(0);
                if (data != null) {
                    return new ByteArrayInputStream(data);
                }
            }
        } finally {
            cursor.close();
        }
        return null;
    }

}

por favor sugiérame dónde estoy haciendo mal. También he agregado permiso de lectura de contacto

Respuestas a la pregunta(2)

Su respuesta a la pregunta