android - fragment 在重新加载时崩溃

标签 android multithreading nullpointerexception fragment

我的问题是,在第二次重新加载时,我的 fragment 因 NullPointerException 而崩溃。异常导致 FragmentTransaction ft = getFragmentManager().beginTransaction();

LogCat:

java.lang.NullPointerException
        at xx.xx.wamomu.ui.MeasurementFragment.refresh(MeasurementFragment.java:344)
        at xx.xx.wamomu.ui.MeasurementFragment$9.run(MeasurementFragment.java:392)
        at java.lang.Thread.run(Thread.java:1019)

在创建 fragment 时,我以 Thread 的形式启动一个循环,它正在监听传入的事件。

public void threadloop(){

    (new Thread(new Runnable() {

        @Override
        public void run() {
            while (!Thread.interrupted())
                try {
                    Thread.sleep(10000);
                    Log.d("LOOP", "TIMEOUT OVER");

                    if (swtch == 1) {

                       refresh();
                        swtch = 0;
                    }
                } catch (InterruptedException e) {
                    // ooops
                }
        }
    })).start();

}

使用refresh() 函数,我试图重新加载实际 fragment 。我在对话框中使用此方法,在关闭对话框后,刷新工作正常。

public void refresh() {

    Log.e("RESUMED", "OK");
    Thread.interrupted();
    Thread.currentThread().interrupt();
    Log.e("CURRENTTHREADREFRESH", "" + Thread.currentThread());
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        changeFragment = new MeasurementFragment();
        ft.replace(R.id.fl_content_frame, changeFragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();


}

在 fragment 中,第一次刷新有效,但第二次似乎使 fragment 崩溃。我在想,也许是循环导致了错误,因此我试图杀死 fragment ,主要是杀死循环线程。但是循环不会停止。

即使我切换到另一个 fragment ,线程也不会停止。我试图在 onPause() 方法中停止它,但循环继续运行。

@Override
public void onPause() {
    super.onPause();
    Thread.interrupted();
    Thread.currentThread().interrupt();
    Log.e("CURRENTTHREADPAUSE", "" + Thread.currentThread());
    Thread.currentThread().interrupt();
    getActivity().getSupportFragmentManager().popBackStack();
}

最佳答案

我解决了我的主要问题, fragment 崩溃了。 我只需要把

FragmentTransaction ft = getFragmentManager().beginTransaction();

onCreate() 方法中。

第二个问题,线程未停止的问题仍在发生。

编辑:

无法解决线程问题,因此我切换到 ScheduledExecutorService,它在 onPause() 方法中停止。

关于android - fragment 在重新加载时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22407155/

相关文章:

android - Firebase 配置的 Codemagic 预构建问题

android - 如何在 Ubuntu 中使用 avdmanager 命令行为 "system-images;android-27;google_apis;x86"创建 AVD?

c# - 字典中存在键时出现 KeyNotFound 异常?

android - 对于 ListView 适配器,如何调用 getView()?

c++ - 多线程程序中映射模式的性能低于预期(4 倍加速比 8 倍)

.net - .Net同步时钟读取方法仅在更新时

java - 读取maven中src/test/resource下包内放置的属性文件

java - fragment 通信问题(尝试调用虚拟方法)

java - 对于我不明白的事情,在这里得到一个空指针异常

java - 如何在android中使用对象类型的自动增量?