問題タブ [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.
java - ListView メソッドが「古いオブジェクト状態」例外をスローするのはなぜですか?
現在、アプリ内で、データベースから ListView を更新するメソッドを呼び出すと、古いオブジェクトの例外が発生します。
データベースにクエリを実行するときにすべてのカーソルを閉じるように注意しました。「startManagingCursor」を使用して返されたときにカーソルも管理しますが、それでもこの問題が発生します。
現時点では、データベースに新しい項目を追加するときに、クラスのプライベート メソッド内で ListView 更新メソッドを呼び出します。これは、オブジェクトが例外をスローしている場所です。
セッションを「更新」している人々について読んだことがありますが、データベースのバージョンがこれに含まれると思いますか? しかし、全体的に私は立ち往生しており、これを解決できません。
更新されたエラー:
02-13 13:23:06.588: E/AndroidRuntime(287): 致命的な例外: メイン 02-13 13:23:06.588: E/AndroidRuntime(287): android.database.StaleDataException: 閉じたカーソルにアクセスする 02-13 13: 23:06.588: E/AndroidRuntime(287): android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217) 02-13 13:23:06.588: E/AndroidRuntime(287): android.database.AbstractWindowedCursor.getInt で(AbstractWindowedCursor.java:84) 02-13 13:23:06.588: E/AndroidRuntime(287): com.example.flybase2.ShoppingList.updateTotal(ShoppingList.java:248) 02-13 13:23:06.588: E /AndroidRuntime(287): com.example.flybase2.ShoppingList.access$1(ShoppingList.java:231) 02-13 13:23:06.588: E/AndroidRuntime(287): com.example.flybase2.ShoppingList$2. onClick(ShoppingList.java:350) 02-13 13:23:06.588: E/AndroidRuntime(287): com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 02-13 13:23:06.588: E/AndroidRuntime(287): android.os.Handler.dispatchMessage(Handler.java:99) 02-13 13:23:06.588: E/AndroidRuntime(287): android.os.Looper.loop(Looper.java:123) 02-13 13:23:06.588: E/AndroidRuntime(287): android.app.ActivityThread で.main(ActivityThread.java:4627) 02-13 13:23:06.588: E/AndroidRuntime(287): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 02-13 13:23:06.588: E/ AndroidRuntime(287): java.lang.reflect.Method.invoke(Method.java:521) 02-13 13:23:06.588: E/AndroidRuntime(287): com.android.internal.os.ZygoteInit$MethodAndArgsCaller で.run(ZygoteInit.java:868) 02-13 13:23:06.588: E/AndroidRuntime(287): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02-13 13:23 :06.588:E/AndroidRuntime(287): dalvik.system.NativeStart.main(ネイティブメソッド)
これは、ListView を呼び出す私のクラスです。
これは、データベースから返されたカーソルです。
android - 時期尚早にcursor.close()を呼び出す以外に、何がStaleDataExceptionを引き起こす可能性がありますか?
私は現在、Androidアプリを大幅に変更/書き直しています.次の行に沿って非常に時折クラッシュするのを見てきました:CursorAdapter
メソッドが呼び出され、それが呼び出されますAbstractWindowedCursor#checkPosition()
.
問題は、s を閉じていないことですCursor
。すべてCursor
の は から来て、CursorLoader
によって生成されますContentProvider
。からCursor
each それぞれにを渡し、for に通知を登録し、eachからに通知しています。要するに、使用中に a が閉じる理由が見つかりません。CursorAdapter
LoaderCallbacks
Cursor
ContentProvider
ContentResolver
insert(...)
delete(...)
update(...)
Cursor
だから:他の原因は何StaleDataException
ですか?
selenium-webdriver - StaleElementReference例外
私はそのStaleElementReferenceException
問題に苦しんでいます。私はこのトピックについてかなりの数の議論を見てきましたが、私が直面している問題の解決策を見つけることができませんでした。
テストでは、Webページのフッターにあるすべてのリンクを取得し、リンクをクリックしてページのタイトルを確認することにより、リンクがアクティブかどうかを確認します。
まず、すべてのリンクを見つけて配列リストに保存します。リンク名をデータベースから取得した値と比較します。次に、リンクごとに、リンクをクリックしてページタイトルを確認します。次に、「driver.navigate.back()」を使用して、元のページに戻り、残りのリンクを続行します。
ただし、コントロールがページに戻ると、StaleElementReferenceException
が発生します。
誰かが私にこれから抜け出す方法を提案できますか?
ありがとう、アヌジ
android - onLoadFinished() 中にカーソルをマージすると、ローテーション後に StaleDataException が発生する
loaderManager を使用して、データベースからいくつかの結果をロードしています。残念ながら、次のコードはデバイスをローテーションした後にStaleDataExceptionを生成します。
getWebSearchesCursor()を呼び出すと、MatrixCursor が返され、返された結果に付随する追加の検索プロンプトが表示されます。adapter.changeCursor(results)をadapter.changeCursor(cursor)に変更するとエラーが修正されることがわかったので、返されたカーソルに MatrixCursor をマージするとエラーが発生するようです。
私の質問は、なぜですか?
結果が返された場合、ユーザーがいくつかの Web サイトで検索を実行できるように、返されたカーソルに項目を追加できるようにしたいと考えています。回転後にこの例外が発生しないように、カーソルをマージするより良い方法はありますか?
image - インテントで Android イメージを開くと StaleDataException が発生する
私は使用してみました:
また
それは機能しますが、画像表示意図を離れようとすると、RuntimeException、StaleDataException Attempted to access a cursor after after it has been closed が発生します
別のインテントを起動しようとすると機能するため、アクティビティの一時停止または再開とは関係ありません
誰か助けてください
電子メールの意図など、他の意図でもあることが判明し、キャンセルするとそのエラーが発生します
android - android.database.StaleDataException: 閉じたカーソルへのアクセス
メインのアクティビティ、SQLiteOpenHelper クラス、および Fragment があり、データベースからデータを含む Cursor を取得する必要があります。
メイン アクティビティ内で、静的パブリック メンバーとしてデータベースを保存して開始します。
これは私のデータベースのクラスがどのように見えるかです:
私のフラグメント内で、すべてのレコードを含むリストを取得しようとしています:
アプリケーションを実行すると、次のエラーが表示されます。android.database.StaleDataException: Access closed cursor
java - findOne を呼び出すと、Hibernate が古いオブジェクトを返す
マルチスレッド Web アプリケーションからSpring Data JPA save(Object entity) メソッドを使用してオブジェクトを保存しています。
時折、次を使用してセッションからオブジェクトをロードすると、次のことがわかります。
セッションから返されたオブジェクトは古く、データベースの最新バージョンを反映していません。このアプリケーションからのデータのみを保存し、Spring Data JPA インターフェースの 1 つのインスタンスのみを使用しています。
何が原因で、どうすれば修正できますか?
android - for ループで使用されるカーソルを閉じる方法
バックグラウンド
次のようにカーソルを使用しています。
これにより、閉じたカーソルを再利用しようとすると、ループの 2 回目のラウンドで StaleDataException が発生します。cursor.close() を削除すると問題なく動作しますが、「事前に閉じることなくカーソルが終了しました」という警告が表示されます。
リサーチ
この回答のアドバイス: https://stackoverflow.com/a/18107638/1977132は、おそらくカーソルを null に設定してcursor.close(); cursor = null;
、新しいカーソルを作成できるようにすることですが、違いはありません。 StaleDataException。
私はすでに試しました...
次のようにループの外に移動してみました:
しかし、これは「カーソルが初期化されていない可能性があります」というエラーでコンパイルされません。
質問
私の質問は、ループ内でカーソルを正しく使用して閉じる方法です。
android - Cursor を閉じると、CursAdapter を使用したバックグラウンド フラグメントで StaleDataException が発生する
これは私の質問へのフォローアップです: How to close a cursor used in a for loop
応答により、「事前に閉じることなくカーソルがファイナライズされました」という警告は解決されましたが、非常に特定の状況で StaleDataException が発生しました。
リストがスクロールされた場合、このカーソルは閉じました...
バックグラウンド化されたフラグメントには、次のエラーが表示されます。
この質問は同様の問題に関連しているようです: onLoadFinished() 中にカーソルをマージすると、回転後に StaleDataException が発生します が、カーソルのマージに関連しており、swapCursor の使用を提案しています。この状況にどのように適用するかわかりません。
私の考えではgetListView().getItemAtPosition(n)
、新しいカーソルではなくカーソルへの参照を返す必要があるため、アクティビティがバックグラウンドであり、フラグメントの状態を保存しているときに現在閉じられているカーソルにアクセスしようとすると、クラッシュします。前述のように、リスト ビューがスクロールされた場合にのみクラッシュします。なぜそれが影響するのかわかりません。
クラッシュを引き起こさずにカーソルを正しく閉じるにはどうすればよいですか?
カーソルがどのようにロードされたかを確認するように求めるコメントに対応する EDIT コード: