title: Loader for "Profile" contact's details
body: <p>I am basing my code on the Login sample supplied with Android Studio. That sample contains code to populate an <code>AutoCompleteTextView</code> with email addresses related to the device's <code>ContactsContract.Profile</code> contact. i.e. the phone's owner, me.</p>
  
  <p>I need to keep using the <code>LoaderCallbacks</code> interface methods - <code>onCreateLoader()</code> and <code>onLoaderFinished()</code>.</p>
  
  <p>I want to fetch <strong>extra details on the contact</strong> like:</p>
  
  <ul>
  <li>phone number</li>
  <li>given name</li>
  <li>family name</li>
  </ul>
  
  <hr>
  
  <p>To achieve this, I have tried adding extra fields to the <code>ProfileQuery</code> interface defined in the sample (that works correctly to fetch email address):</p>
  
  <pre><code>private interface ProfileQuery {
      String[] PROJECTION = {
              // these fields as per Android Studio sample
              ContactsContract.CommonDataKinds.Email.ADDRESS,
              ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
  
              // these fields added by me
              ContactsContract.CommonDataKinds.Phone.NUMBER,
              ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
              ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME
      };
  }
  </code></pre>
  
  <hr>
  
  <p>I have modified the <code>onCreateLoader()</code> method to remove the sample's WHERE clause in the hope to get the extra data:</p>
  
  <pre><code>public Loader&lt;Cursor&gt; onCreateLoader(int i, Bundle bundle) {
      return new CursorLoader(this,
              // Retrieve data rows for the device user's 'profile' contact.
              Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
                      ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
  
              // select all fields
              null, null,
  
              // Show primary email addresses first. Note that there won't be
              // a primary email address if the user hasn't specified one.
              ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
  }
  </code></pre>
  
  <hr>
  
  <p>For what it is worth, at the moment my <code>onLoadFinished()</code> just logs the received data out:</p>
  
  <pre><code>public void onLoadFinished(Loader&lt;Cursor&gt; cursorLoader, Cursor cursor) {
      cursor.moveToFirst();
      while (!cursor.isAfterLast()) {
          Log.d("xxx", cursor.getString(0) + cursor.getString(1) + cursor.getString(2) + cursor.getString(3) + cursor.getString(4));
          cursor.moveToNext();
      }
  }
  </code></pre>
  
  <hr>
  
  <p>I would like each cursor row to give me a complete set of data relating to the Profile contact. Instead, I am getting seemingly random fields from that contact.</p>
  
  <p>My <code>CursorLoader</code> construction is clearly wrong, but I do not know how to fix that.</p>
  
  <p>How can I get the following details from my Profile contact:</p>
  
  <ul>
  <li>email address</li>
  <li>phone number</li>
  <li>given name</li>
  <li>family name?</li>
  </ul>