問題タブ [android-cursorloader]
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 - CursorLoader を使用して SQLite DB をクエリし、AutoCompleteTextView に入力する
クエリを実行したい SQLite データベースがあります。ICS を介して Android 2.2 をターゲットにしたいと考えています。これを行う方法についてこの記事に出くわしましたが、非推奨のコードを使用しています (非同期ではなく、UI スレッドでクエリを実行します)。CursorLoader
それ以来、このタスクを推奨されるベスト プラクティスの方法で実行できることを読んだことがLoaderManager
あります (UI スレッドを停止させないため)。
問題は、これを行う方法を説明する簡潔な例を見つけることです。1) データベースをロードし、2) クエリを実行し、3) 結果を使用して AutoCompletetextBox リスト ビューに入力します。
そのような例は存在しますか?
android - onLoadFinished()のカーソルからウィジェットにデータを入力します
CursorLoader
を使用して画面にウィジェットを配置する方法を知りたいです。オンラインのすべての例は、アダプターを使用するためだけのものであり、これはうまく機能します。私が必要としているのは、カーソルとUIスレッドから画面のビューを更新するための信頼できる方法でありStaleDataException
、カーソルが突然非アクティブ化されたためにクラッシュすることはありません。これが私の現在のアプローチですが、それでもユーザーからクラッシュレポートを受け取ります。
1つの解決策は、onLoadFinished内で直接すべてのカーソルフィールドを取得し、それらすべてをハンドラーに渡して、UIスレッドにウィジェットを設定することです。しかし、カーソルに多くの値がある可能性があるため、これは醜いです。これらすべてに対処するための信頼できるクラッシュのない方法を見つけたいと思います。
android - startManagingCursor から CursorLoader に (適切に) 移行する方法は?
AndroidSDK
を最新バージョンに更新したところstartManagingCursor()
、deprecated
. 新しい CursorLoader
.
では、startManagingCursor()
古いコードですが、新しいコードが翻訳された場合、どのように見えるでしょうか?
android - LoaderManager によって管理されるカスタム アダプターを使用した AlphabetIndexer
AlphabetIndexer
このようなカスタムアダプターで実装しようとしています
カスタム アダプターを使用した AlphabetIndexer
私のクラス ContactsCursorAdapter は拡張SimpleCursorAdapter
および実装されており、アダプターのカーソルを管理するためSectionIndexer
に を使用しているため、上記の例に対する2番目の回答が示すようにメソッド LoaderManager
をオーバーライドしました。swapCursor()
ただし、リストビューを fastScrollEnabled = true に設定すると、これはエラーになります
getListView().setFastScrollEnabled(true);
ListFragment
LoaderManager.LoaderCallbacksを拡張および実装する私のクラス ContactsCursorLoaderListFragment で。
スタック トレースは次のとおりです。
setFastScrollEnabled()
メソッドが呼び出された後、getSections()
クラッシュする場所であるカスタムアダプターのメソッドを呼び出します。
また、呼び出しにコメントするsetFastScrollEnabled()
と、エラーは発生しませんが、動作はわかりませんAlphabetIndexer
。
ListFragment
カスタム アダプタがではなく に設定されているため、これを別の方法で実装する必要がありListActivity
ますか?
これをすべて機能させる方法について誰か提案がありますか?
android - CursorLoader を使用した GROUP BY
GROUP BY
CursorLoader のクエリを定義するにはどうすればよいですか?
a の 2 つのコンストラクターは、 1 つまたは , , ,のいずれかをCursorLoader
取ります。Context
Context
Uri
projection
selection
selectionArgs
sortOrder
しかし、いいえgroupBy
。
(Android 2.3 デバイスのサポート パッケージを使用しています)
android - ExpandableListView の SimpleCursorTreeAdapter および CursorLoader
CursorLoader
を使用してプロバイダーを非同期的にクエリしようとしていますSimpleCursorTreeAdapter
Fragment
これが実装する私のクラスですCursorLoader
そして、これがサブクラス化する私のアダプターですSimpleCursorTreeAdapter
問題は、親グループの 1 つをクリックすると、一貫性のない方法で 3 つのうちの 1 つが発生することです。
1) グループが開き、その下に子が表示されます。
2) グループが開かず、setChildrenCursor()
呼び出しがエラーをスローNullPointerException
し、try catch ブロックでキャッチされる
3) グループが開かず、エラーがスローされない
グループが展開され、子が表示されているシナリオでのデバッグ出力を次に示します。
すべてのグループが表示されると、次のように出力されます。
-1 は、グループ カーソルの loader_id です。
次に、特定のグループを 1 つ選択すると (グループ A と呼びましょう)、次のように出力されます。
群れが広がらずチンコをNullPointerException
挟まれる。次に、別のグループ (グループ B と呼びましょう) を選択すると、次のように出力されます。
今回は、NullPointerException
はスローされません。グループ B が展開される代わりに、グループ A が展開されます。
setChildrenCursor()
通話が示している動作を説明できる人はいますか?
グループ/子 CursorLoaders が でインスタンス化される方法に問題があると考えていますonCreateLoader()
。グループCursorLoader
の場合、電話にすべてのグループが必要です。子CursorLoader
には、グループ内のすべての連絡先が含まれている必要があります。何が問題なのか誰にも考えがありますか?
アップデート
@Yam のアドバイスのおかげで、getChildrenCursor()
メソッドを修正しました。initLoader() 呼び出しに渡す ContactsContract.Groups._ID の値ではなく、groupCursor の位置を選択しています。また、loader が null ではなく、loader isReset が false の場合にのみ restartLoader() を呼び出すようにロジックを変更しました。
これは間違いなくより理にかなっており、グループが拡大する場合と拡大しない場合があるという不規則な動作を示すことはありません。
ただし、属していないグループの下に表示されている連絡先があります。また、連絡先が含まれているが、連絡先が表示されないグループもあります。そのため、getChildrenCursor()
問題は現在解決されているようです。
しかし今では、CursorLoaders がメソッドでどのようにインスタンス化されるかの問題のようonCreateLoader()
です。CursorLoader
子カーソルのメソッドで返されたがonCreateLoader()
不適切にインスタンス化されていませんか?
アップデート
それで、私は自分の問題の1つを特定しました。getChildrenCursor()
メソッドで groupId をメソッドに渡すとinitLoader()
、メソッドonCreateLoader()
でCursorLoader
が作成されると、クエリの正しい groupid パラメータが取得されます。ただし、onLoadFinished()
への呼び出しでsetChildrenCursor()
は、groupPosition ではなく、最初のパラメーターのローダー ID が渡されます。ローダーIDをデータ構造のグループ位置にマップする必要があると思います。しかし、これが最善のアプローチであるかどうかはわかりません。誰か提案はありますか?
android - Androidのプレイリストにないリストとしてすべての音楽を検索します
CursorLoaderを使用して、特定のプレイリストにないすべての音楽を取得したいと思います。出来ますか?
次のコードを使用して、リスト内のすべての音楽を取得できます
しかし、私は反対のことをする必要があります。それは、特定のプレイリストにないすべての音楽を取得することです。どうやってやるの?
android - CursorLoader で生成された Cursor 列の文字列を EditText に入れる
Honeycomb でアプリをプログラミングしていますが、コンテンツ プロバイダーのカーソルに問題があります。公式のメモ帳の例からのこの単純なコードが達成する効果を達成したいと思います:
つまり、ユーザーが編集できるように、Cursor の現在の位置から EditText にデータを配置したいだけです。問題は、CursorLoader でこれを行う方法がわからないことです。managedQuery() は非推奨であるため使用できません。いずれにしても、非推奨の startManagingCursor() を呼び出す必要があります。どうすればいいですか?前もって感謝します。
android - カーソルが変化したときに Android OnLoadFinished() が呼び出されない
インターフェイスActivity
を実装する単純なものを作成しました 。LoaderManager.LoaderCallbacks<Cursor>
はOnCreateLoader()
簡単です:
getLoaderManager().initLoader(0, null, this)
このメソッドは、Activity
が作成されたときに呼び出すと呼び出されます。
私の問題はContentProvider
、次のquery()
メソッドを持つ my にあります。
queryCursor
ウェブサーバーから応答を受け取った後、データベースで更新されます。ただし、の update メソッドでメソッドを呼び出すと、 のインスタンス化時に使用したものと uri が同じであっても、 のgetContext().getContentResolver().notifyChange(uri, null)
メソッドは呼び出されません。ContentProvider
OnLoadFinished()
Activity
CursorLoader
これは、次の更新方法ContentProvider
です。
同じURIOnLoadFinshed()
を呼び出したときにメソッドが呼び出されない原因を誰か教えてもらえますか?notifyChange()
ありがとう、クリスティ
android - カスタムの CursorAdapter と CheckBox の状態
提案された CursorAdapter 実装を使用しようとすると問題が発生しますCursorLoader と一緒に。CursorAdapter は、Cursor を介して静的なデータ セットを提供できる場合はうまく機能しますが、これを CursorLoader と組み合わせようとすると、nullpointers で問題が発生します。アダプターにカーソルをフィードすると、最初は空です (CursLoader 実装を処理するときに頻繁に提案されるように、null に設定されます)。アダプターは、インスタンス化時に、カーソルをループしてチェックボックスの状態を把握し、さまざまなテキストビューやウィジェットにデータを入力します。残念ながら、カーソルはインスタンス化時に null であり、CursorLoader が完了したときにのみデータ セットが供給されます。この CursorAdapter を CursorLoader と一緒に使用することが可能かどうかを調べようとしていますが、本当に助けていただければ幸いです。
ここに私の完全なアダプターがあります: