问题标签 [staledataexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 应用程序设计问题:android.database.StaleDataException
首先,我调查了 SO 上的其他 StaleDataExceptions,但没有一个真正回答,或者引导我找到解决当前应用程序设计问题的方法。
我正在创建一个音乐播放器应用程序,我最初设计它是为了从内容提供程序中检索信息来查询它MediaStore.Audio
-CursorLoader
这工作正常,但显然如果你有一个大的音乐库,那么可能需要一个非常理想的等待时间来获取所有内容每次加载应用程序时返回的信息。我的第二种方法是在应用程序首次启动时启动远程Service
,它查询MediaStore.Audio
使用 aCursorLoader
并注册任何更新。当Cusror
返回时,我然后运行AsyncTask
将信息处理到自定义 POJO 类的 ArrayList 中,该类实现Parcelable Interface
然后通过Intent
返回音乐应用程序中的处理程序。此解决方案运行良好,因为如果应用程序已关闭并重新打开,它只需查询Service
最新ArrayList
的 custom Objects
,而不必查询MediaStore.Audio
-Service
实现LoaderCallback<Cursor>
并始终更新ArrayList
customObjects
并在打开时通知应用程序,如果没有它有当应用程序重新打开时,它们已准备好。
正确 - 解决问题(好吧,花了一些时间,但有必要的背景信息)。问题是:如果我在另一个媒体应用程序中并开始快速连续删除音乐文件,则Listener
在我的服务中注册的服务将被回调并提供新的光标,但是AsyncTask
我用来迭代现有光标的Race Condition
位置是被另一个Thread
/CursorLoader
随着更新而关闭Cursor
- 抛出异常:android.database.StaleDataException: Attempted to access a cursor after it has been closed.
我正在使用的当前解决方法是setUpdateThrottle
在注册侦听器时使用 20 秒,这有效,但是意味着将更新的信息返回给服务会有延迟。
有没有可行的解决方案或方法可以避免这个问题?
提前致谢。
更新
一个可行的解决方案实际上很容易实现 - 但它最初的问题确实说明了我缺乏使用装载机的经验,但是我已经获得了一些关于寻找解决方案的知识。
解决方案:
我还在用遥控器Service
。但是,当我仍在回调中处理它时,我没有使用CursorLoader
- 来关闭它,而是使用. 与a 耦合仍然可以监视来自 a 的底层数据更改,但不像 a 那样直接与对象耦合。我能够监视数据更改并告知它需要重新加载数据(新任务。cursor
onLoadComplete()
AsyncTaskLoader
AsyncTaskLoader
ContentObserver
Uri
Cursor
CursorLoader
AsyncTaskLoader
forceLoad()
java - Debugging StaleElementReference exception - Selenium WebDriver
I am in some kind of situation here.
I have a function editNewUser().
The UserName is a public string variable that gets value in another function, during creation of user.
In this script, I am navigating to a page that contains list of users, I am storing all user names in List 'elements' and then iterating over each element in the list whose text matches with user name.
Now, in my test_run script, I have some other methods calling after editNewUser().
The thing happens is, this method executes the following commands in if block.
But as soon as next method is called, it stops the execution and throws org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Stack Trace refers to the line if(el.getText().equals(UserName))
.
Can you tell me why am I receiving this exception, event though the commands inside if block are executed.
android - Android - Activity 销毁期间的 android.database.StaleDataException
我现在在我的应用程序中面临这种崩溃只有两个设备,三星 Galaxy(SM-G950F [api 26] 和 Galaxy J7 [api 23])。
我认为他们是三星这一事实非常重要,因为我使用的所有其他测试设备(物理、LG [api 24] 和 Genymotion 的模拟器)从未发生过。
这是完整的堆栈跟踪:
我在这里基本上有一个 Activity,由一个ViewPager
锚定在屏幕底部的 Activity 组成,其中第一个片段是一个RecyclerView
水平LayoutManager
的,想要模仿 Telegram/Messenger 图片库。一切都由使用 a从设备获取媒体文件的类CustomGalleryAdapter
(扩展)处理,并且由于可访问性原因,在销毁 Activity 期间再次引用光标时,该类会崩溃。这个 Activity 是在等待它的结果时创建的,所以当我完成后,我会像往常一样调用以传递结果。 RecyclerView.Adapter
Cursor
finish()
RecyclerView
带有监听 Loader 回调 的片段:
并查看在我的光标已经关闭时回调我的光标的框架源代码:
调用getItemCount()
方法:
我认为我可以onDestroyView()
在片段的方法中将 mAdapter 字段设置为 null:
解决问题。但是当我尝试使用三星测试实验室进行测试时,该应用程序不断崩溃。
但非常奇怪的是,我试图在我的设备上调试那些可访问性行甚至没有被断点捕获......
有人有建议吗?
android - 领域崩溃项目已删除。但我确实先重新查询领域
我得到回复,我这样做:
这是在我的 Beacon.java 模型类中。现在,在我的活动中,我这样做:
我收到此错误:
为什么会这样?如果我重新创建我的领域实例并重新查询,为什么它会返回已删除的对象?我只想显示剩余的对象。
如果没有,是否有不同的方法来检查和删除未从服务器更新的对象?
ruby-on-rails - Ruby on Rails 中是否有一种内置方法可以避免将过时形式的数据写入数据库?
在我的应用程序中,多个用户可以编辑数据库中的同一个对象。如果 user1 将数据加载到表单中,但 user2 在 user1 加载表单但在 user1 提交数据之前将数据写入数据库,我想阻止保存 user1 的数据。
Rails 中是否有任何内置的东西,或者 Ruby/Rails 社区库中是否有任何东西可以解决这个问题?
我可以自己尝试,在read_at
所有 UI 元素发回的所有模型上都有一个虚拟属性。但我知道问题可能比看起来更复杂,如果有内置的解决方案,我想知道。
除非使用预先构建的解决方案,否则我可能会考虑使用特定于 Rails 的特性吗?我知道有一个表单令牌?我想知道我是否可以从中获取时间信息?