問題タブ [android-loader]
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 - Android ハニカムのローダー
Android 3.0 での使用方法を理解しようとしてLoaders
いますが、動作しないようです。ドキュメントは使用についてのみ説明していますCursorLoader
が、私は使用していAsyncTaskLoader
ます。
ドキュメントからは、実装するだけでよいようですが、コールバックでローダーを作成したAsyncTaskLoader.loadInBackground()
後に呼び出されることはありません。getLoaderManager().initLoader()
Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}
正常に作成されたように見えるデバッグ メッセージが表示されます。
現在、SDK でローダーが壊れている可能性はありますか? または、ローダーを作成した後に呼び出す必要があるメソッドはありますか? (このCursorLoader
例ではそれを行っていません)。
forceLoad()
編集:から返されたローダーを呼び出すと、initLoader()
少なくとも読み込みが開始されるようですが、これは回転を正しく処理できないことを意味します:(
android - ハニカム ローダーは、AsyncTask + UI 更新の問題を解決できますか?
バックグラウンドで何かを実行してから UI を更新することは、Android で正しく実装するのが非常に困難です。単純に設計が悪い。典型的な例は、Web から何かをフェッチして結果を表示する AsyncTask です。これには 2 つの問題があります。
AsyncTask には Activity への参照があります (UI を更新する必要があるため)。画面の向きを変更した後、Activity を再起動します。ただし、AsyncTask はまだ古い破棄されたアクティビティを参照しているため、新しいアクティビティの UI を更新できません。
これにより、OutOfMemoryException が発生する可能性があります。多くのビットマップを含むアクティビティがあり、AsyncTask を開始するとします。BACK を押します (Activity は終了しました) が、AsyncTask はまだ実行中であり、Activity を参照しているため、ビットマップを含む Activity はまだメモリ内にあります。これを繰り返すと(アクティビティを開始して戻る)、遅かれ早かれ強制終了します。
これは解決できますが、複雑すぎます。1 つのアクティビティに 3 つの異なる AsyncTasks があり、それぞれが複数のインスタンスで同時に実行できます。これを正しく実装するのはイライラします。コードの理解とデバッグが非常に難しくなります。
ハニカムローダーはどうにかしてこれを解決できますか? また、ハニカム以前の Android バージョンでそれらを使用する方法はありますか?
android - 複数のローダーを持つ LoaderManager: 正しいカーソルローダーを取得する方法
複数のローダーがある場合に正しいカーソルを取得する方法は明確ではありません。次のように 2 つの異なるローダーを定義するとします。
次にonCreateLoader()で、ID に応じてさまざまなことを行います。
ここまでは順調ですね。ただし、正しい Cursoradapter の正しい Cursor を識別するための ID を取得できないため、 onLoadFinished()で正しいカーソルを取得する方法。
または私は間違っていますか?これは、1 つのフラグメントで 2 つの異なるカーソルアダプターの結果を取得する間違った方法です。
android - LoaderManager のスコープは何ですか?
ローダーを使用して Android アプリケーションを作成する場合、すべてのアクティビティとフラグメントに独自のLoaderManager
. それともLoaderManager
、アプリケーションが所有するものは 1 つだけにする必要がありますか? 最後に、特定の s を識別するために使用される「一意の ID」LoaderManager
は、クラスの外部に表示されますか?
具体的には、アプリケーション内のどのクラスがLoaderCallback<Cursor>
メソッドを実装する必要があるかを判断するのに苦労しています (つまり、各フラグメントでこれらのコールバックを実装する必要があるか、または 1 つのフラグメントでコールバックを実装して結果をクエリし、必要に応じて他のフラグメント/アクティビティに送信する必要があります)。 ?
私を助けてくれる人に前もって感謝します!これについては、オンラインであまり多くの情報を見つけることができませんでした。
android - AndroidのAsynctaskに対するローダーの利点は何ですか?
非同期タスクに対するローダーの利点はありますか? また、ローダーを Android froyo を搭載した携帯電話に対応させる方法。
編集:
ここでの主な問題は、ネイティブ DB (SqlLite) を使用していないことです。開発サーバーでDBを使用。当然、もう使えませんCursorLoader
。AsyncTaskLoader
には例がまったくありません。あればリンクお願いします。
必要なデータをローカル DB にロードし、それを使用してクエリを実行することをお勧めしますCursorLoader
か?
java - SimpleAdapterCursor swapCursor() によるカーソルの交換
アプリケーションにコンテンツ プロバイダーを設定し、LoaderManager を使用してデータをロードしましたが、カーソルをカーソル アダプターに交換する際に問題が発生しました。問題を追跡し、それad.swapCursor(cursor);
が問題のようです。
ここで私が間違っていると思いますか?それはコンテンツプロバイダーである可能性がありますか?
ありがとう
android - LoaderManagerはデータをオフラインで取得し、次にオンラインで取得します
この優れたユーザビリティパターンに従いたいと思います。アプリはデータをオフラインで保存して応答を高速化し、新しいデータをオンラインで取得したときに更新します。
そして、私はで使用Loaders
しLoaderManager
ます。
さて、前述のアプローチを実装するための正しいアプローチは何Loaders
ですか?
現在、私は2つのアプローチを使用していますが、欠点があり、一般的にあまりエレガントではありません。
- SQLiteではなくアプリケーションコンテキストにデータを保存する
- 2つの別々の
AsyncTaskLoaders
-offlineLoader
とonlineLoader
。1つ目はSQLiteデータベースからデータをフェッチし、そこにある場合はすぐに表示し、2つ目は外部サーバーからデータをロードしてデータベース(offlineLoaderの場合)に書き込み、オフラインデータを置き換えます
私が本当に欲しいのは:
データをオフラインでフェッチしてLoaderManagerに返す単一のローダーですが、その後も引き続き機能し、準備ができたら新しいオンラインデータを返します。したがって、2回戻る必要があります-それも可能ですか?
android - AndroidはImageDownloadをCursorLoaderと組み合わせる
私はImageDownloaderで非常に単純なCursorLoaderを使用しています。ImageDownloaderが実行され、CursorLoader以外のすべてが終了し、ImageDownloaderが画像のダウンロードを開始しますが、GridViewはダウンロードされた画像で更新されません。
ListFragment内に、次のonActivityCreatedメソッドがあります。
私のCursorLoaderは次のとおりです。
すべての写真を取得する#STEP 1というラベルの付いた行は、次のように、カーソルを取得するメソッドにすぎません。
したがって、これはListFragmentのCursorLoaderであり、そのカーソルが返されるときに完全であると見なされます。これは正しいことです。私の理解では、setAdapter()メソッドは、実際にgetViewメソッドをトリガーするものです。
私が抱えている問題は、すべてが正常に実行されているように見えることです。ログ出力は画像のURLを正しく出力し、ブレークポイントはすべて正当なデータを示していますが、問題は、グリッドビューが画像で更新されないことです。 ImageDownloaderが取得します。
編集
これはSimpleCursorLoader
私が使用しているものです:https ://gist.github.com/1217628
android - ActionbarSherlockを備えたAndroidTabsAdapter
LoaderManager.LoaderCallbacksを実装するSherlockListFragmentでActionbarSherlockを使用しています。
私が使用しているApplicationActivityonCreateメソッドで
レイアウトを設定するには-うまく機能します。
私はそのようにアクションバーを初期化しています
ApplicationActivity内に、最初に開いたときにロードするのに数秒かかるAsyncTaskがあり、APIに対して手動で更新した場合、つまり、上記でインスタンス化されたフラグメントのListViewを更新する必要があります。 onPostExecuteメソッド、これが私がそれを行う方法です:
これはすべて機能します
今、私はTabsAdapterを入れて、私が行った派手なスワイプタブを取得したかったのですが、それは機能しますが、onPostExecuteについて述べた最後の部分は機能しません:(
これは私のTabsAdapterです:
これは、ApplicationActivityから更新されたonCreateメソッドです。
これは、ApplicationActivityのonPostExecuteメソッドに対して行った更新です。
基本的に、onPostExecuteコードを実行しようとしたとき
フラグメント内のcursorAdapterからNullPointerExceptionが発生しますが、フラグメントが見つかりました。
編集-要求されたコード
android-fragments - Android IllegalStateException: フラグメントがアクティビティに添付されていません
私はこの問題に遭遇し、この問題に関連するここと他の場所の両方で多数の投稿を思いつきました.
このアプリケーションは Android 16 を対象としていますが、min は 8 に設定されています。そのため、Android サポート ライブラリを使用して新しい API にアクセスしています。
ListFragment であるフラグメントをロードするアクティビティがあります。横向きモードのタブレットで実行している場合、リスト項目をクリックすると、最初のフラグメントが 2 番目のフラグメントを 2 ペイン レイアウトでロードします。電話の場合、新しいアクティビティは 2 番目のフラグメントを読み込みます。
2 番目のフラグメントは、CursorLoader を使用して、バッキング データ ストアとして ContentProvider にアクセスします。このフラグメントが独自のアクティビティから呼び出される場合、問題はありません。ただし、2 ペイン レイアウトの場合、CursorLoader は上記の例外で失敗します。
コードは次のとおりです。
問題はメソッド loadPrograms で発生しました。具体的には次の行です。
これは IllegalStateException をスローしていました。ドキュメントと多数の例を調べた後、この問題を一度も見たことがなく、続行するためにキャッチする必要がありました。
コードを try/catch ブロックでラップして何が起こるかを確認したところ、驚いたことに、アプリは期待どおりに動作しました。
編集: 2 ペイン レイアウトを確立するアクティビティ コードは次のとおりです。
Listener メソッド onProgramGroupSelected は、1 つのペインと 2 つのペインのレイアウトが決定される場所です。左ペインのリスト項目がクリックされると、リスナーが呼び出されます。
この例外が発生する理由を説明できる人はいますか?
プロジェクトの完全なコードは、https://github.com/MythTV-Android/mythtv-for-androidにあります。