Я пытаюсь реализовать Cursor Loader
и Custom Cursor Adapter
с базой данных (локальная база данных Sqlite) в моим проектом Android. Я на самом деле хочу асинхронно кормить свой список с данными из моей локальной базы данных с помощью Cursor Loader и Adapter`. Ниже есть мой класс, подкласс и методыОбъект, возвращаемый с onCreateLoader, не должен быть нестационарным внутренним классом-членом: DumbLoader
// Home Activity class
public class HomeActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
DotCursorAdapter mAdapter;
private ListView lv;
private final int LOADER_ID = 1932;
DatabaseHandler dbHelper = new DatabaseHandler(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
lv = (ListView) findViewById(R.id.lists);
mAdapter = new DotCursorAdapter(this, null,0);
lv.setAdapter(mAdapter);
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new DumbLoader(this);
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
mAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
mAdapter.swapCursor(null);
}
/**
* DumbLoader sub class
*/
public class DumbLoader extends CursorLoader {
private static final String TAG = "DumbLoader";
public DumbLoader(Context context) {
super(context);
}
@Override
public Cursor loadInBackground() {
Cursor c = dbHelper.fetchAllCountries();
return c;
}
}
/**
* DotCursor Adapter sub class
*/
public final class DotCursorAdapter extends CursorAdapter {
public DotCursorAdapter(Context context, Cursor cursor, int flags) {
super(context, cursor, 0);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
TextView tvBody = (TextView) view.findViewById(R.id.header_text);
String body = cursor.getString(cursor.getColumnIndexOrThrow("fname"));
// Populate fields with extracted properties
tvBody.setText(body);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.list_cardview_activity, parent, false);
}
}
}
Ниже также мой метод обработчика базы данных, который извлекает данные из базы данных.
public Cursor fetchAllCountries() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor mCursor = db.query(TABLE_LOGIN, new String[] {KEY_ID,KEY_FIRSTNAME},
null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Проблема Исполняя эти коды над ним дает ошибку сообщения из журнала кошки и craches приложения.
главной ошибка
Объект вернулся из onCreateLoader не должна быть нестатическим внутренним классом -члена
Ниже также моих бревенчатых детали кошки
09-21 16: 13: 25.563: D/AbsListView (26541): Get MotionRecognitionManager 09-21 16: 13: 25.568: D/AndroidRuntime (26541): выключение VM 09-21 16: 13: 25.573: W/dalvikvm (26541): threadid = 1: нить, выходящая с неперехваченное исключение (группа = 0x411372a0) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): FATAL EXCEPTION: main 09-21 16: 13: 25.573: E/AndroidRuntime (26541): java.lang.RuntimeException: Не удалось запустить Деятельность ComponentInfo {com.alliswell.alliswell/com.alliswell.alliswell.HomeActivity}: java.lang .IllegalArgumentException: Объект вернулся из onCreateLoader не должен быть нестатический внутренний класс член: DumbLoader {418dc668 ID = 0} 09-21 16: 13: 25,573: Е/AndroidRuntime (26541): на android.app. ActivityThread.performLaunchActivity (ActivityThread.java:2110) 09-21 16:13 : 25.573: E/AndroidRuntime (26541): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2135) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.app.ActivityThread .access $ 700 (ActivityThread.java:140) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1237) 09-21 16 : 13: 25.573: E/AndroidRuntime (26541): at android.os.Handler.dispatchMessage (Handler.java:99) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.os .Looper.loop (Looper.java:137) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.app.ActivityThread.main (ActivityThread.java:4921) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at java.lang.reflect.Method.invokeNative (родной метод) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at java. lang.reflect.Method.invoke (Method.java:511) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 1038) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:805) 09-21 16:13:25.573: E/AndroidRuntime (26541): at dalvik.system.NativeStart.main (родной метод) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): вызвано: java.lang.IllegalArgumentException: Object Возврат из onCreateLoader не должен быть нестационарным внутренним классом-членом: DumbLoader {418dc668 id = 0} 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.support.v4.app. LoaderManagerImpl $ LoaderInfo.start (LoaderManager.java:257) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.support.v4.app.LoaderManagerImpl.doStart (LoaderManager.java:714) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java: 556) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1178) 09-21 16: 13: 25.573: E/AndroidRuntime (26541)): at android.app.Activity.performStart (Activity.java:5198) 09-21 16: 13: 25.573: E/AndroidRuntime (26541): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2083) 09-21 16: 13: 25,573: E/AndroidRuntime (26541): ... 11 более
Я думаю, что я делаю что-то неправильно в моих кодов, я был бы признателен, если кто-то может помочь мне решить Эта проблема. Спасибо.
Ошибка довольно ясна: переместите класс DumbLoader за пределы класса HomeActivity или сделайте его статическим. – Luksprog
public * static * class DumbLoader extends CursorLoader {...} –