java.lang.IllegalStateException: Fragment未附加到Activity

181

在调用API时,我很少遇到这个错误。

java.lang.IllegalStateException: Fragment  not attached to Activity

我尝试将代码放入 isAdded() 方法中,以检查片段是否已添加到其活动中,但仍很少出现这种错误。我不明白为什么我仍然会出现这个错误。我该如何避免?

它显示错误在以下行上-

cameraInfo.setId(getResources().getString(R.string.camera_id));

下面是我正在进行的样本API调用。

SAPI.getInfo(getActivity(),
                new APIResponseListener() {
                    @Override
                    public void onResponse(Object response) {


                        cameraInfo = new SInfo();
                        if(isAdded()) {
                            cameraInfo.setId(getResources().getString(R.string.camera_id));
                            cameraInfo.setName(getResources().getString(R.string.camera_name));
                            cameraInfo.setColor(getResources().getString(R.string.camera_color));
                            cameraInfo.setEnabled(true);
                        }


                    }

                    @Override
                    public void onError(VolleyError error) {
                        mProgressDialog.setVisibility(View.GONE);
                        if (error instanceof NoConnectionError) {
                            String errormsg = getResources().getString(R.string.no_internet_error_msg);
                            Toast.makeText(getActivity(), errormsg, Toast.LENGTH_LONG).show();
                        }
                    }
                });

cameraInfo.setId(getActivity().getResources().getString(R.string.camera_id)); - Ashwin H
13个回答

0

每当您调用不可用或空时调用上下文时,就会出现此问题。这可能是在后台线程上调用主活动线程的上下文或在主活动线程上调用后台线程的上下文时出现的情况。

例如,我像以下方式更新了我的共享首选项字符串。

editor.putString("penname",penNameEditeText.getText().toString());
editor.commit();
finish();

然后紧接着调用finish()。现在它的作用是,由于commit在主线程上运行,并且在完成之前停止任何其他异步提交(如果有),因此其上下文会保持活动状态直到写操作完成。因此先前的上下文仍然存在,导致错误发生。

因此,请确保重新检查代码是否存在此上下文问题。


你是怎么解决这个问题的?我在异步线程中调用它,现在遇到了这个问题。 - Simon
请确保写操作完成后再终止上下文,而不是在写操作完成之前终止。 - Prashant Paliwal

0

当片段没有上下文时,就会发生这种情况,因此getActivity()方法返回null。 在获取上下文之前检查是否使用了上下文,或者Activity不再存在。在fragment.onCreate和api响应后使用上下文通常会导致这个问题。


0
有时候,这个异常是由于支持库实现中的一个 bug 导致的。最近我不得不降级到 25.4.0 版本才能摆脱它。

不,我没有,但也许我应该创建一个。 - Bord81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接