0
我試圖從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()在火力地堡在SQLite的數據和下載缺失從火力地堡數據到DB數據進行比較。它有效地工作,因爲我可以在日誌中看到它。 我也嘗試將notifyDataSetChanged添加到onPostExecute,但它沒有幫助。 如果有人知道爲什麼數據可能不會在第一次打開片段時顯示,請幫助我找到解決方案。
只是要清楚,你可以打印在'database.rawQuery返回光標()'的大小。打印並確保首次大小不爲零。 – Dibzmania
第一個openin光標大小爲0.看起來,onPostExecute在doInBackground完成之前開始。有沒有辦法讓onPostExecute等待doInBackground完成? – Dmitriy
根據Android API doc,你所說的是不可能的。我認爲你需要正確放置日誌並再次檢查 – Dibzmania