問題タブ [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.

0 投票する
2 に答える
11897 参照

android - AndroidSimpleCursorAdapterとCursorLoaderの使用法

私はAndroidを初めて使用し、ヘッダーSimpleCursorAdapterCursorLoaderクラスを取得しようとしています。私の理解では、これまでに見たすべての例では、これら2つのクラスを使用してListView、バックグラウンドスレッドのにデータをロードしています(UIをブロックしないため)。

私はこれで大丈夫で、自分のアイテムのリストでこの一般的なアプローチを使用しましたが、リスト内のアイテムをクリックして、そのアイテムの完全な情報を取得できるようにしたいと思います。単一のアイテムの詳細を使用SimpleCursorAdapterおよび取得するのは通常の方法ですか?CursorLoaderそれとも単にリストのためのものですか?

ありがとう。

0 投票する
1 に答える
547 参照

android - ListFragment の CursorLoader を使用したクエリでデータが返されない

ListFragment で CursorLoader を使用してクエリを実行するのに引き続き苦労しています。私の問題の一部は、特定の詳細について確信が持てないことにあると思います。アプリ内の 2 つのフラグメントを定義する xml ファイル myfragment.xml があります。最初のフラグメントである私の ListFragment は、次のように識別されます。

ListFragment クラスで SimpleCursorAdapter を呼び出すときは、次のようにする必要があると思います。

info は、以前のアクティビティから渡した Bundle です。そうですか?また、SimpleCursorAdapter の最後のパラメーターとして 0 を使用する例や、CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER を使用する例もいくつか見てきました。違いは何ですか?最後に、このページ は、次のようにコードで LoaderManager を取得する必要があることを示している場合があります。

}

しかし、これは私がこれを見た唯一の場所です。これは必要ですか?これらの質問に対する回答を得ることで、クエリが結果を返さない理由を掘り下げるのに役立つことを願っています。この時点で、データベースが作成され、データが取り込まれていることを確信しています。どうもありがとう!

以下に要求されているように、LoaderManager.LoaderCallbacks インターフェイスの 3 つのメソッドを次に示します。

onCreateLoader メソッドの args.GetString("Level") が「Beginning」であることをデバッガーで確認したことを付け加えておきます。

0 投票する
1 に答える
3079 参照

android - CursorLoader が Fragment にデータを表示しない

次のことを行うアプリがあります: ListView を使用したアクティビティには、初級、中級、上級の 3 つの項目が表示されます。ユーザーの選択に応じて、アプリは、Level=Beginning または Intermediate または Advanced である基になる SQLiteDatabase からのすべての項目を表示する ListView を使用して Fragment に移動する必要があります。この2番目のステップはうまくいきません。データベースにデータがあることをデバッガーで確認したので、それは問題ではありません。最初のアクティビティのコードは次のとおりです。これは onItemClick メソッドからのものです。

これは Fragment クラスであり、上記のコードで参照されています。

}

次に、stitchfragment.xml という Fragment の XML ファイルを示します。

これが ListFrag クラスです。サポート ライブラリと、StitchProvider という ContentProvider を備えた CursorLoader を使用しています。SQLiteDatabase は SQLData と呼ばれます。

}

onListItemClick メソッドは、詳細フラグメントにデータを表示するためのものですが、ここまで到達することはありません。Intent のデータに基づいてデータベースから取得されたアイテムのリストは表示されません。

いくつかの考えられる問題/質問が思い浮かびます:

1) onCreateLoader メソッドのクエリの構文は正しいですか? たとえば、「stitchlevel='Beginning'」と読みます。args.getString("Level") のデータが有効であることはわかっています。これは、デバッガーで追跡したためですが、ここでの構文は正しいですか? 私はそれが標準的な SQL 構文であるべきだと仮定していますが... 3) 同様に、次の行の SimpleCursorAdapter は、ここで android.R.layout.simple_list_item_1 は正しいですか? それとも、おそらく R.layout.stitchfragment である必要がありますか? 4) ContentProvider のクエリ メソッドにブレークポイントを設定しましたが、ブレークポイントにヒットしませんでした。CursorLoader が作成されたときにすべきではないですか? さらにList FragmentのonLoadFinishedメソッドにブレークポイントを入れると、カーソルはヌルです。何が欠けていますか 5) Fragment の onActivityCreated メソッドの dataColumns には、テーブルの _id 列を含める必要があると言われました。本当?リストにはステッチ名という 1 つの情報しか表示されないので、私には奇妙に思えます。ただし、_id がここに含まれているかどうかに関係なく、フラグメント リストには何も表示されません。7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... 何が欠けていますか 5) Fragment の onActivityCreated メソッドの dataColumns には、テーブルの _id 列を含める必要があると言われました。本当?リストにはステッチ名という 1 つの情報しか表示されないので、私には奇妙に思えます。ただし、_id がここに含まれているかどうかに関係なく、フラグメント リストには何も表示されません。7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... 欠けているもの 5) Fragment の onActivityCreated メソッドの dataColumns には、テーブルの _id 列を含める必要があると言われました。本当?リストにはステッチ名という 1 つの情報しか表示されないので、私には奇妙に思えます。ただし、_id がここに含まれているかどうかに関係なく、フラグメント リストには何も表示されません。7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... リストにはステッチ名という 1 つの情報しか表示されないためです。ただし、_id がここに含まれているかどうかに関係なく、フラグメント リストには何も表示されません。7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... リストにはステッチ名という 1 つの情報しか表示されないためです。ただし、_id がここに含まれているかどうかに関係なく、フラグメント リストには何も表示されません。7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... フラグメントの onActivityCreatedMethod で行うように? 7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです.... フラグメントの onActivityCreatedMethod で行うように? 7) Fragment の onActivityCreated メソッドで getLoaderManager().initLoader() の前に setListAdapter が呼び出される例と、setListAdapter が後で呼び出される例を見てきました。どちらが正しい?どちらも私を助けないようです....

単純にこれを行うと、フラグメントを表示することができました:

したがって、フラグメントにデータを表示できることはわかっています。CursorLoader と ContentProvider で動作していないようです。これが情報の過負荷でないことを願っています。もしそうなら申し訳ありません。誰かに何かアイデアがあれば、私はとても感謝しています。

0 投票する
2 に答える
2153 参照

android - ListFragment から情報を取得する方法

CursorLoader を使用して入力された ListFragment があります。ListFragment にデータが入力されると、OnItemClickListener メソッドを使用して、ユーザーが選択した List Fragment の項目を特定します。どうすればいいですか?私はもう試した:

position は、次のように onClickItemListener メソッドに渡される整数です。

これらはすべて、何らかのタイプのキャスト例外をスローします。私は困惑しています。これは簡単なことのように思えます。参考までに、List Fragment がどのように設定されるかを次に示します。

どんな提案でも大歓迎です、ありがとう!

0 投票する
2 に答える
1575 参照

android - 非アクティビティのCursorLoader

コンテンツプロバイダーからの通話ログ、SMSログなどのシステムメトリックを読み取る小さなプロジェクトがあります。

コンテンツプロバイダーから読み取り、(Call / SMS)Metricsクラスのオブジェクトに情報を保存するために、 (Call / SMS)Loggerクラスを作成しました。

MainActivityは、 (Call / SMS)Metricsクラスのオブジェクトの情報を使用し、databaseOpenHelperクラスを使用して自分のデータベースにデータを保存します。

ここで、CursorLoaderを使用してコンテンツプロバイダーからデータをロードする予定です。

私が見た例は、MainActivityがLoaderManager.LoaderCallbacksを実装していることを示唆しています

実際のクエリが非アクティビティクラスで行われる場合、プロジェクトでこれをどのように使用できますか?

アクティビティでI1loaderMangerを作成し、アクティビティ以外のすべてに使用できますか?

サンプルコードスニペットは次のとおりです。

メインアクティビティからデータのコレクションを呼び出し、コンテキストをclssessに渡して、マネージャーカーソルで使用できるようにします。

SMSDataをレイドするSystemMetricsCollectorのメソッド

SMSLoggerクラスの変数。

カーソルを使用してデータを読み取るSMSLoggerのメソッド

0 投票する
2 に答える
664 参照

android - Android-RANDOM()で並べ替えられたカーソルの再クエリ

これはばかげた質問のように聞こえるかもしれませんが、Imはそれに苦労しています。私は見積もりアプリケーションに取り組んでいるので、アプリケーションが起動するたびにデータベースから見積もりをランダムに並べ替えたいと思います。

CursorLoaderとViewPagerを使用しています。画面にいくつかのボタン(put-to-favourites-button)があります。これは、ContentProviderのupdate()をトリガーするコンテンツリゾルバーを使用してデータベースの列を更新します。次に、更新により、行われた変更を更新するために再クエリが発生します。すべての標準。

もちろん、これにより、random()句による順序が原因で順序が異なる行が表示され、画面が「消える」ようになります。

これを回避する方法はありますか?ランダムな順序付け機能を維持したいです。

0 投票する
2 に答える
1593 参照

android - CursorLoaderの例外を処理する

LoaderManagerを実装し、CursorLoaderを使用しているフラグメントがあります(特別なことは何もありません)。クエリ中にスローされた例外をキャッチしたいのですが、方法がわかりません!!! 何か助けはありますか?どうも。

0 投票する
2 に答える
5391 参照

java - MediaStore.Images.Thumbnails.getThumbnail が NULL ではなく間違ったサムネイルを返す

次の図のようなシナリオを検討してください。

ネイティブギャラリー

3 枚の写真のうち、1 枚は大きな GIF ファイル (3MP) です。

対応するサムネイルを取得するために、MediaStore にクエリを実行しています。この sortOrder で CursorLoader を介して Cursor を初期化すると、次のようになります。

何が起こるか: MediaStore は以前に正常に取得されたサムネイルを返します。

説明

予想される動作: MediaStore が何らかの理由で特定の画像のサムネイルを取得できない場合、その Javadoc に従って NULL を返す必要があります: "... Bitmap インスタンスを返します。origId に関連付けられた元の画像がない場合は null になる可能性があります存在するか、メモリが不足しています。」

この sortOrder で Cursor を初期化すると、次のようになります。

それはうまく動作します:

ASC

ただし、要件は最新の写真を最初に表示することであるため、単に sortOrder を変更することはできません。

以下は私のサンプル コードです。ここには、完全なサンプル プロジェクト、再現に使用した 3 つの画像があります。

何か不足していますか?誰が何が間違っているのか考えていますか?

とにかく Android に対するバグを埋めました

編集

この問題はLollipop では修正されているようです。(そのスレッドの最後のコメント)。

0 投票する
0 に答える
443 参照

android - onLoadFinished()でAndroidアプリがクラッシュする

SQLiteデータベースを使用して、ListViewに表示されるReservationsというオブジェクトを保存しています。以前は非推奨の関数startManagingCursor()でカーソルを使用していましたが、ListViewが表示されているアクティビティでアプリがクラッシュしました。

そこで、代わりにCursorLoadersとContentProvidersを使用しようとしましたが、これを使用して次のことを行いました。

調査中の何らかの理由で、このアクティビティを起動するとすぐにアプリがクラッシュします。

これが私のContentProviderです:

何が間違っていたのですか?:( 前もって感謝します。

PS:ReservationsBDDは、SQLiteOpenHelperであるMaBaseSQLiteからアイテムを取得するためのDAOです。

0 投票する
2 に答える
7222 参照

android - Android: メモリ制限を回避するために ContentProvider で非常に大きなデータ セットを処理する

を使用しContentProviderてデータベースをクエリし、Cursorで使用される を返しCursorLoaderます。

アイテム活動:

ItemsContentProvider:

アクティビティには がありListViewCursorAdapter( を介して更新されたLoaderCallbacks) を使用してカーソル内のデータを表しています。

大規模なデータ セット (たとえば、30,000 行を超える) 内のアイテムを検索する必要があるまで、これは正常に機能しています。ログを観察すると、ルックアップがメモリ制限を超えており、結果のカーソルからいくつかの行が削除されていることがわかります。

私の質問: このようなカーソルを使用する場合、非常に大きなデータセットを処理する最良の方法は何ですか?

私の現在の解決策は、SQLiteクエリContentProviderをオフセットと制限のある一連のクエリに分割し、MergeCursorクラスを使用してこれらのクエリを結合することです:

これによりすべてのデータが読み込まれますが、最初のルックアップの実行中に長い遅延が発生します。複数のクエリが実行されている間、リスト ビューは約 5 秒間空になります。

単一のルックアップ (バッチ ルックアップではなく) を試すと、ロードはほぼ瞬時に行われることに注意してください。

そう:

単一のクエリを使用する: リスト ビューの更新は高速ですが、スクロールが一時停止し、メモリの制限に達します。

バッチ クエリの使用: リスト ビューの更新は遅くなりますが、スクロールはスムーズで、メモリ制限に達しません。

リストビューをすばやく更新するだけでなく、リストをスクロールするときに必要に応じてより多くのデータを取得するより良いソリューションがあるかどうか疑問に思っています。

アンドロイド 4.2.1、ネクサス 7