問題タブ [android-contentresolver]
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 - コンテンツ プロバイダーにクエリを実行するときに列にエイリアスを設定しますか?
ユーザーが連絡先を検索するときに、検索ダイアログにカスタム候補を表示しようとしています。カスタム提案では、コンテンツ プロバイダが という名前の列の 1 つを含む列を返す必要がありますSearchManager.SUGGEST_COLUMN_TEXT_1
。
次のようにプロジェクションを宣言する Contacts プロバイダーにクエリを実行しています。
しかし、これは例外をスローしています:
私は調査してきましたが、これは連絡先プロバイダーが にstrictProjectionMap
フラグを設定してSQLiteQueryBuilder
いるためです。エイリアスを指定できる回避策があるかどうか疑問に思っています。いくつかの解決策を見つけましたが、それらはコンテンツ プロバイダーを変更する必要があり、この場合は Android プロバイダーであるため変更できません。
それが不可能な場合、このシナリオのベスト プラクティスは何ですか? 私の現在の解決策はMatrixCursor
、正しい列名で を作成し、クエリから返されたカーソルからすべての値を連絡先プロバイダーにコピーすることですが、効率の点で非常に間違っていると感じるので、もっと良い方法があると思います.
ご提案いただきありがとうございます。ファン
java - ContentProvider insert()は常にUIスレッドで実行されますか?
サーバーからデータをプルし、ユーザー入力に応じてSQLiteデータベースに挿入する必要があるアプリがあります。これは非常に単純だと思いました。サーバーからデータをプルするコードは、AsyncTaskのかなり単純なサブクラスであり、UIスレッドをハングさせることなく期待どおりに機能します。シンプルなインターフェイスでコールバック機能を実装し、静的クラスにラップしたので、コードは次のようになります。
すべてまだ良いです。サーバーがデータを取得するのに1時間かかる場合でも、getFolderContentsのコードはAsyncTaskのdoInBackgroundメソッド(UIとは別のスレッドにあります)で実行されているため、UIはスムーズに実行されます。getFolderContentsメソッドの最後で、onFolderContentsResponseが呼び出され、サーバーから受信したFilesystemEntryのリストが渡されます。私が実際に言っているのは、getFolderContentsメソッドやネットワークコードのいずれにも問題が発生していないことを明確にするためです。
この問題は、onFolderContentsResponseメソッド内のContentProviderのサブクラスを介してデータベースに挿入しようとすると発生します。そのコードの実行中は常にUIがハングし、AsyncTaskのdoInBackgroundメソッドから呼び出されたにもかかわらず、挿入はUIスレッドで実行されていると私は信じています。問題のあるコードは次のようになります。
そしてinsertContentsIntoDB
方法:
ここで、mContentResolverは以前にgetContentResolver()メソッドの結果に設定されています。
次のように、insertContentsIntoDBを独自のスレッドに入れてみました。
また、個々の挿入を独自のスレッドで実行してみました(MyContentProviderの挿入メソッドは同期されているため、問題が発生することはありません)。
また、念のため、別のAsyncTaskのdoInBackgroundメソッドの関連コードを使用してこれらのソリューションの両方を試しました。最後に、MyContentProviderをAndroidManifest.xmlの別のプロセスに存在するものとして明示的に定義しました。
正常に動作しますが、それでもUIスレッドで動作しているようです。それは私が本当にこれで私の髪を引き裂き始めたポイントです、なぜならそれは私には全く意味がないからです。私が何をしても、挿入中は常にUIがハングします。彼らをそうさせない方法はありますか?
android - Android:UriMatcher を使用して複数のテーブル、クエリ パラメータ、およびアクティビティを切り替える方法は?
次の問題を解決する方法について、あなたの考えを読みたいと思います。私が取り組んでいるアプリケーションの基本的な要件は次のとおりです。
- 1 つの都市の複数の場所を地図上に表示します。
- 複数の都市のサポート。
- 別の詳細ビューに場所のプロパティを表示します。
- 各都市のロケーション プロパティは異なります。
マップの位置に基づいて都市を切り替える柔軟な決定ロジックを実装したいと考えています。つまり、私が頼りにしている最初の情報は、マップの中心です。これが理論上のワークフローです。
- マップから現在の中心位置を取得します。
- 場所を都市のURLとuriに変換します。
- URL を使用して HTTP 経由で場所をダウンロードします。
- 場所をローカル データベースに保存します。場所のプロパティが異なるため、都市ごとに 1 つのテーブル。
- URI を使用してコンテンツ リゾルバーからキャッシュまたはダウンロードされたデータを読み込みます。
- オーバーレイ アイテムを作成し、uri 参照と一意の idを含めます。
- 場所をタップすると詳細ビューが開きます。
- 詳細ビューは、都市固有の場所のプロパティをレンダリングする必要があります。
- 場所のプロパティは、渡された uri と一意の ID に基づいて、コンテンツ リゾルバーを介して再度読み込まれます。
質問:
- クラスを使用して都市、列名などのクエリパラメーターを切り替える方法に特に興味があります。
UriMatcher
- 都市ごとに1 つの詳細ビューを用意していただけますか? または、利用可能なプロパティ情報に基づいて、テキスト フィールド、ラベルなどを交換するための実用的な解決策はありますか?
さまざまなプロパティを説明するために、2 つの都市とコンテンツ プロバイダーの例を次に示します。
例:
そして別の都市...
そしてコンテンツプロバイダー...
すべてのデータベース参照を 1 つにまとめることは、将来データを同期する必要がある場合に問題になる可能性があることを読んだため、1 つまたは複数のコンテンツ プロバイダーを使用するかどうかはわかりません。
android - 選択したアカウントでサポートされている権限を一覧表示します
を使用して、選択したアカウントのみを同期するアプリケーションを開発しようとしていますContentResolver.requestSync(account, authority, extras);
。
とをそれぞれとして使用して、連絡先とカレンダーを同期することができました。com.android.contacts
com.android.calendar
authority
しかし、特定のアカウントでサポートされている機関のリストを取得する方法はありますか?
また、null
として使用するとどのような効果がありauthority
ますか?
android - ContentResolver.SYNC_EXTRAS_EXPEDITED の動作はどこでも定義されていますか?
ContentResolver.SYNC_EXTRAS_EXPEDITED が正確に何をするか知っている人はいますか? その定数の API ドキュメントは基本的に空白です。
それは私が望んでいるように聞こえますが(提供されたアカウントを最初に同期し、他のアカウントよりも先に同期します)、常に知っておくとよいでしょう...
android - registerContentObserver
音声通知に関するコールバックを取得したい。オブザーバーを作成します:
毎回 onChange を取得してから、曲を追加または削除します。
しかし、私は別のものを理解していません:私はいくつかのファイル(test.log)をデバイスにコピーします。ファイルをコピーした後、onChange を取得しません。しかし、このファイルを削除すると、onChange になります。しかし、なぜ?
java - Android で Java を使用して 2 番目に最近のテキスト メッセージを選択する
Android プラットフォームで Java を使用して会話の 2 番目のメッセージを選択することはできますか?
受信トレイを照会して、2 番目に新しいテキスト メッセージを選択したいと考えています。上記のコードでこれを行う最良の方法は何でしょうか? クエリをそれほど絞り込むことは可能ですか?
android - CallLog.Calls での RuntimeException
をクエリしようとすると、一部のデバイスで RuntimeException が発生することがありますCallLog.Calls
。CallLog.Calls
withをクエリしcontentProvider
て、最後の呼び出しを取得します。
時々このエラーが発生するのはなぜですか? これはシステムのバグ/問題だと思いますか?
CallLog を照会する私のコードは次のとおりです。
android - ContentResolver.insert()はすぐには反映されませんか?
私のアクティビティからの次のコードスニペットは、その後のアプリケーションの呼び出しでonCreate()
うまく機能します(つまりtrueです)。cursor.moveToFirst()
だから、私は確かにが正しく実行されていることを知っています。cr.insert()
しかし、私のアプリケーションを最初に呼び出すと、その前にあるにもかかわらず、falsecursor.moveToFirst()
が返されます。cr.insert()
なんで?
ある種の「フラッシュ」または「クローズ」ステートメントが必要ですか?
android - ブラウザの履歴を取得する Chrome 用の Bookmark Contentprovider はありますか
ContentResolver を使用して Browser.BOOKMARKS_URI でブラウザ履歴データを取得するアプリがあります。標準の Android ブラウザで問題なく動作します。現在、Google はデフォルトのブラウザとして Chrome に移行しています。Chrome は同様の Contentprovider を提供していますか? ウェブ全体を検索しましたが、これに関する情報は見つかりませんでした。Google がリリースした Android 上の Chrome のドキュメントはまだありますか? 前もって感謝します!