問題タブ [akavache]
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 - Akavache にそのようなテーブルはありません: SchemaInfo
Xamarin で Akavache を使用しようとしています。NuGet から Android および Windows Phone プロジェクトに Akavache パッケージをインストールしました。
初期化:
3 行目でエラーがスローされます (Android と Windows Phone の両方のターゲットで)。
私は何を間違っていますか?
前もって感謝します :)
c# - 大規模なコレクションで ReactiveList.AddRange が機能しない
ネットワークからダウンロードした文字列のリストを表示する単純な TableView があります。リストは非常に大きい (~140k 文字列)。AddRange を使用しても何も起こりませんが、小さな 2 項目リストを静的にコーディングすると、正常に動作します。
ビュー モデルのリロード コマンドのコード:
ただし、次のように変更すると、実際にはテーブル ビューにセルが追加されます。
私の推測では、非常に非効率的な方法で項目を追加していて、AddRange 呼び出しから戻っていないだけです。私は Rx/ReactiveUI/MVVM/all-this-cool-linq-stuff に非常に慣れていませんが、前提はかなり素晴らしいです。
それだけの価値があります-私はMonoTouchでこれをやろうとしています。
c# - Akavache を使用してシリアル化できないプロパティがキャッシュされないようにするにはどうすればよいですか?
Akavache を使用してキャッシュするカスタム クラスがあります。このクラスには、シリアル化できないプロパティが 1 つ含まれています (これは ParseFile オブジェクトです)。GetAndFetchLatest を使用してこのカスタム クラスのリストをキャッシュ/取得しようとすると、機能しません。シリアル化できないプロパティが原因である可能性があると思います。JsonIgnore 属性を試してみましたが、役に立ちませんでした。
質問は、シリアル化できないプロパティを除いて、カスタム クラスのリスト内のすべてをキャッシュするように Akavache に指示するにはどうすればよいですか? カスタム クラスのサンプルはこちらです。Photo プロパティを無視する必要があります。
android - Akavache がアプリの再起動間でキャッシュ データを保持しない
共有 PCL ライブラリを使用する Xamarin Android プロジェクトがあり、Akavache を一時データ ストアとして使用することにしました (単純なログイン状態情報を保存し、毎回再ログインを保存するため)。
そこで、Akavache および Akavache.Sqlite3 nuget パッケージを共有ライブラリ (および Xamarin.Android プロジェクト) に追加しました。を設定しBlobCache.ApplicationName
、呼び出しさえEnsureInitialized
しました(メッセージをログに記録する以上のことはしていないようです)。
アプリをデバイスにデプロイしました。手動で起動しました(データや設定などの消去はありません)。アプリが実行されている限り、データはキャッシュ (および取得) されます。キーが欠落している場合、(予想どおり) 例外がスローされます。すべてが完璧に機能します。
次に、アプリをシャットダウンしました(ある段階では、電話を再起動しました)。再起動すると、キャッシュが空になるか、再初期化されます。いずれにせよ、キャッシュしたものはすべてなくなりました。
キャッシュ sqlite3 ファイルが保存されている場所をデバッガーで調べたところ、アプリは明らかにdata/data/packagename/cache/xyzblobs.db
. これらのファイルは内部のシステム キャッシュ/アプリ ファイル ディレクトリにあるため、表示できません。したがって、ワイプされているかどうかはわかりません。
WRITE_EXTERNAL_STORAGE (および READ_) 権限を有効にしました。サイコロはありません。Secure
、UserAccount
およびLocalMachine
ターゲットを使用してみました。なだ。それらのどれも機能しません。
アプリが実行されている (またはメモリ内にある) 限り、期待どおりに動作します。アプリがなくなる瞬間、キャッシュも消えます。
私が行っていない唯一のことは、メソッドを呼び出すことBlobStorage.Shutdown()
です。そして、それは私がそれをどこに呼ぶべきかわからないからです。私は複数のアクティビティを持っていますが、愚かなので参照カウントをしたくありません。
編集:後で強制的に電話をかけましたが.Shutdown().Wait()
、それも役に立たなかったようです。
他の誰かがこれを経験しましたか?まったく同じ問題を抱えている他の人を少なくとも 1 人知っています。詳細については、こちらのXamarin フォーラムを参照してください。
Xamarin 以外の Android の他の場所で以前に使用したことがあるので、すべての Akavache を引き出す必要は本当にありません。それは素晴らしいことです。それ以外の場合は、ある種の xplat 共有設定マネージャーを調べ始める必要があります。
編集:コードの一部を次に示します。
初期化(シングルトンタイプのものを保持するために使用する静的な共有「AppGlobal」クラスがあります)
デバッガーで起動して見ると、すべて正常にBlobCache
動作します。Sqlite3 ストレージとそのパスを使用していることがわかります (ルート化されていない環境では、sqlite3 .db ファイルにアクセスできません)。デバイス)
次のようなものでキャッシュの取得/設定を呼び出すことができます
currentCookie = await BlobCache.LocalMachine.GetObject<Cookie>("authCookie");
そしてそれらを書き戻す
await BlobCache.LocalMachine.InsertObject("authCookie", cookie);
すべての Akavache 呼び出しは、共有ライブラリで行われています。どのストア (Secure、UserAccount、または LocalMachine) を使用しても、動作は同じです。
すべてが完璧に機能します。次に、アプリを終了します。アプリを再度開くと (電話を再起動してアプリが消えたことを確認できます)、キャッシュは空です。またはリセットします。もしくは新たに作りました。.db ファイルが表示されないため、どれかわかりません。
私はデバッガーの下で実行しておらず、毎回再デプロイしています。したがって、展開ディレクトリが破壊されることはありません。これは、apkをインストールしても発生します。おそらく、これらのdbファイルが本来の場所にないことに関係していると思いますが、完全に途方に暮れています。
プラットフォーム固有のレベルで何かを実装し、それを共有ライブラリに渡す必要がありますか? すべての依存関係とパスが解決されているように見えるので、そうは思いません。
私はこれで何時間も無駄にしました。
ありがとう :)
akavache - Akavache データベースをクリアするにはどうすればよいですか?
ローカル オブジェクトのキャッシュに Akavache を使用しています。データベース内のすべてを削除できるようにしたいのですが (プログラムを初めて実行したかのように)。バキューム メソッドを見たことがありますが、それは有効期限が切れた古いアイテムのみを削除します。すべてをきれいにする簡単な方法は何ですか?