0

В моем приложении я получаю контактные данные с помощью Loader. Я отлаживал приложение и обнаружил, что приложение вылетает из первого оператора, который встречается в обратном вызове onLoadFinished.Загрузка данных из смены курсора onLoadFinished

Вот код:

@Override 
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) { 
    Log.d("Loader","Load Finished"); 
    mAdapter.changeCursor(arg1); 

    phonenumber_enter.setAdapter(mAdapter); 

} 

Я нахожу, что сбой приложения на первой линии в функции обратного вызова (в данном случае происходит сбой приложения, когда сообщение записывается). Вот LogCat:

02-05 21:31:07.357: E/AndroidRuntime(31707): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.lang.Thread.run(Thread.java:841) 
02-05 21:31:07.357: E/AndroidRuntime(31707): Caused by: java.lang.IllegalArgumentException: Invalid column data1 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.content.ContentProviderProxy.query(ContentProviderNative.java:413) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.content.ContentResolver.query(ContentResolver.java:461) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.content.ContentResolver.query(ContentResolver.java:404) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:35) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:242) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123) 
02-05 21:31:07.357: E/AndroidRuntime(31707): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 

Я вижу, что нет колонки data1, но это не должно иметь значение, поскольку Cursor загрузчик создается следующим образом:

@Override 
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
    return new CursorLoader(getActivity(), 
      ContactsContract.Contacts.CONTENT_URI, null, null, null, 
      null); 
} 

Поскольку проекция равна нулю I подумал, что будут выбраны все возможные столбцы. После отладки я обнаружил, что в курсоре нет указателя data1. Любые мысли были бы очень оценены.

EDIT: Я только что протестировал приложение, и кажется, что авария не возникает, когда у меня есть отладчик, прикрепленный к приложению. Хотя курсор не возвращается, поэтому кажется, что загрузчик работает неправильно.

EDIT 2: Итак, я снова отладил приложение и увидел все столбцы, которые возвращает курсор. В столбце нет номеров телефонов. Вот исходное заявление:

CursorLoader(getActivity(), 
      ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

Любые идеи?

+0

Вероятно, это дубликат http://stackoverflow.com/questions/17255434/logcat-says-invalid-column-data1 – dimsuz

ответ

0

Итак, после беспорядка я обнаружил, что исходное утверждение было неверным (я запрашивал неправильную базу данных). Я изменился с:

CursorLoader(getActivity(), 
     ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

в

CursorLoader(getActivity(), 
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
      null, null); 

 Смежные вопросы

  • Нет связанных вопросов^_^