#android #database #android-fragments #dao
Вопрос:
Это код моего фрагмента, когда я создал recyclerview, когда я могу видеть список, если я нажму на него, я смогу увидеть детали на странице antoher, но когда я вернусь, я не смогу увидеть список.
@Переопределение
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
SharedPreferences pref = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
adapter = new PlatformAdapter(data);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
//recyclerView.setAdapter(adapter);
if (pref.getBoolean("firstTime", true)) {
RequestVolley.getInstance(getContext())
.doGetRequest("http://www....json", new RequestVolley.OnCompleteCallback() {
@Override
public void onCompleted(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i ) {
JSONObject object = jsonArray.optJSONObject(i);
if (object != null) {
data.add(Platform.parseJSON(object));
}
}
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
new Thread(new Runnable() {
@Override
public void run() {
DB.getInstance(getContext()).getPlatformDao().insert(data);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("firstTime", false);
editor.apply();
final PlatformAdapter adapter = new PlatformAdapter(data);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
recyclerView.setAdapter(adapter);
}
});
}
}).start();
}
if(pref.getBoolean("firstTime",false)){
new Thread(new Runnable() {
@Override
public void run() {
data.addAll(DB.getInstance(getContext()).getPlatformDao().findAll());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
final PlatformAdapter adapter = new PlatformAdapter(data);
recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.setAdapter(adapter);
}
});
}
}).start();
}
}
}
это код моего приложения в точке вставки или перезагрузки из базы данных RoomDatabase, в первый раз, когда я открываю страницу, все в порядке, но во второй раз я вижу только белую страницу.Почему? У меня нет никакой ошибки. Почему его нет в базе данных или он не перезагружается?
Это мое Дао
@Dao
платформа открытого интерфейса: {
@Insert(onConflict = OnConflictStrategy.REPLACE)
public void insertOne(Platform platform);
@Insert(onConflict=OnConflictStrategy.REPLACE)
public void insert(List<Platform> platforms);
@Insert(onConflict=OnConflictStrategy.REPLACE)
public void insertVarArgs(Platform...platforms);
@Update
public void update(Platform platform);
@Delete
public void delete(Platform platform);
@Query("SELECT * FROM platforms")
public List<Platform> findAll();
@Query("SELECT * FROM platforms WHERE cdenominazione__=:cdenominazione__")
public Platform findById(String cdenominazione__);
}
Комментарии:
1. Что такое «новая страница»? Это новое действие или вы добавляете новый фрагмент?
2. Всегда фрагментируйте, но проблема не в навигации от/к фрагменту, а в базе данных.
3. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Когда вы добавляете фрагмент, вы делаете добавление или замену? Aso вы добавляете фрагмент в резервную копию?
Комментарии:
1. Я ориентируюсь с действием на втором фрагменте, а затем возвращаюсь к первому, и я ничего не вижу. Но когда я выполняю вставку или загрузку из БД, я думаю, что это не работает.