Я использую код , предоставленный @Colin MacKenzie - III. Большое спасибо!
Для тех, кто ищет замену «устаревшему» managedQuery:
1-й, при условии поддержки v4 lib:
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
второй:
your_(activity)_class implements LoaderManager.LoaderCallbacks<Cursor>
третий,
// temporarily store the 'data.getData()' from onActivityResult
private Uri tmp_url;
4-й, переопределить обратные вызовы:
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// create the loader here!
CursorLoader cursorLoader = new CursorLoader(this, tmp_url, null, null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
getContactInfo(cursor); // here it is!
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
пятый:
public void initLoader(Uri data){
// will be used in onCreateLoader callback
this.tmp_url = data;
// 'this' is an Activity instance, implementing those callbacks
this.getSupportLoaderManager().initLoader(0, null, this);
}
6th, код выше , за исключением того, что я изменяю параметр подписи с Intent на Cursor:
protected void getContactInfo(Cursor cursor)
{
// Cursor cursor = managedQuery(intent.getData(), null, null, null, null);
while (cursor.moveToNext())
{
// same above ...
}
7, вызовите initLoader:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (PICK_CONTACT == requestCode) {
this.initLoader(data.getData(), this);
}
}
8-й, не забудьте этот кусок кода
Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
this.act.startActivityForResult(intentContact, PICK_CONTACT);
Ссылки:
Основы Android: правильная загрузка данных
Инициализация загрузчика в действии