【问题标题】:When I run my app it's ok only at the firts time only当我运行我的应用程序时,只有第一次可以
【发布时间】:2021-11-16 00:03:44
【问题描述】:

这是我的片段的代码,当我创建一个recyclerview时,如果我点击可以看到一个列表,我可以在antoher页面中看到详细信息,但是当我回来时我看不到列表。

@Override

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重新加载时的代码,我第一次操作页面没问题,但第二次我只能看到一个白色页面。为什么?我没有任何错误。 为什么它不在数据库上,或者它没有重新加载?

这是我的道

@道

公共接口 PlatformDao {

@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__);

}

【问题讨论】:

  • 什么是“新页面”?这是一个新的活动还是你在添加一个新的片段?
  • 总是片段,但问题不在于从/到片段的导航,而在于 DB。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: android database android-fragments dao


【解决方案1】:

当您添加片段时,您是在添加还是替换? Aso,您是否将片段添加到后台堆栈?

【讨论】:

  • 我在第二个片段中使用一个动作导航,然后我回到第一个片段,我什么也看不到。但是当我从数据库中插入或加载时,我认为它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多