Я пытаюсь загрузить данные из Firebase в SQLite, а затем показать их по фрагменту, но данные отображаются только при втором открытии фрагмента.Обновление данных в SQLite и заполнение ListView в фрагменте с ним
public class Root_Exercises_Fragment_v2 extends BaseFragment {
public static final String TAG = "TAG1";
private ListView mListview;
private MyAdapter mAdapter;
private DBHelper dbHelper;
private SQLiteDatabase database;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.myLayout, container, false);
new AsyncClass().execute();
mListview = (ListView) view.findViewById(R.id.mListview);
return view;
}
class AsyncClass extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... parameter) {
MyClass myClass = new MyClass(getActivity());
myClass.myFunction();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Log.v("TAG", "In postExecute");
dbHelper = new DBHelper(getActivity());
database = dbHelper.getReadableDatabase();
mAdapter = new MyAdapter(getActivity(), database.rawQuery(getString(R.string.myQuery), null)) {
};
mListview.setAdapter(mAdapter);
}
}
}
В doInBackground функции myClass.myFunction() сравнивает данные в Firebase для данных в SQLite и загрузки отсутствующих данных из Firebase в БД. Он работает бессильно, потому что я вижу его в журнале. Я также попытался добавить notifyDataSetChanged в onPostExecute, но это не помогло. Если кто-нибудь знает, почему данные могут не отображаться при первом открытии фрагмента, пожалуйста, помогите мне найти решение.
Просто чтобы быть ясно, вы можете напечатать размер курсора, который возвращается в 'database.rawQuery()'. Распечатайте его и убедитесь, что размер не равен нулю в первый раз. – Dibzmania
На первый размер курсора openin равен 0. Похоже, что onPostExecute запускается до завершения doInBackground. Есть ли способ сделать onPostExecute ждать завершения doInBackground? – Dmitriy
То, что вы говорите, невозможно в отношении документа API Android API. Я думаю, вам нужно правильно поставить журналы и снова проверить – Dibzmania