問題タブ [asynctaskloader]

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 に答える
4544 参照

java - ジェネリック、継承を使用して、向きの変更を処理する http リクエストの AsyncTaskLoader

現在、非同期 http ライブラリを使用して、サーバーに対して http 要求を実行しています。ただし、これには、画面の回転中に http 呼び出しが進行中の場合、呼び出しが終了したときに古いコンテキストへの参照があるという問題があります。onCreateでキャプチャされた最新のインスタンスへの静的参照を保持し、その参照でメソッドを呼び出すことでこれを回避しました(そしてonDestroyでそれをnullにします)。それはうまくいきましたが、ハックのように見えました。以下のように、これに対処するためにフラグメントの使用を推奨する人もいます。

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

これは良いアイデアのように思えますが、Activity で FragmentActivity を拡張し、私がやっていること専用の AsyncTaskLoader サブクラスを使用するだけでこれを達成できると考えていました。

ここに私の考えがあります: ApiRequest を受け取り、ApiResponse を返す AsyncTaskLoader を実装します。ただし、HttpAsyncTask をサブクラス化し、応答を解析するメソッドをオーバーライドして、応答を解析し、ApiResponse を拡張する別の種類のオブジェクトに変換できるようにしたいと考えています。ただし、これを実現するために型引数を指定する方法がわかりません。

これが私のコードです:

どうすればこれを達成できるか考えている人はいますか?型パラメータの指定方法がわかりません。このクラスをそのまま使用できるようにし、サブクラス化できるようにしたいと考えています。ポイントは、上記の loadInBackground メソッドの機能を再実装したくないということです。ApiResponse をジェネリック パラメータとして使用し、onLoadFinished で返された ApiResponse オブジェクトを期待している特定の基本クラスにキャストできると確信していますが、よりタイプ セーフな方法でこれを行いたいと思います。また、本質的に同じことを別の方法で達成するアイデアにもオープンです。

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

android - ListFragment Loader AsyncTaskLoader JSON を使用してリストビューの結果を繰り返す

Listfragmentでは、 JSONの結果をオンライン サーバー(1,2,3,4) から読み込むことができますが、ホーム ボタンを押してアプリに戻ると、Listview に重複したリスト (1,2,3, 4,1,2,3,4)、画面を回転させると時々発生します。

私はたくさん読んでいます...そしてたくさんの投稿がありますが、さまざまなケースがあるので、ここに私のケースがあります...

私のUI ... ViewPager > ListFragment

ListFragment : ローダー、AsyncTaskLoader、BaseAdapter、JSON、HashMap

使用しない/私の場合ではない: Cursors、SQLite、ContentProvider、Activity、ListActivity、String[]

はい... httpclient を httpurlconnection に変更します:)

さらに良くなった...別のアクティビティから ListFragment に戻り、アイテムを選択すると... アプリがクラッシュします!!!、LogCat は次のように述べています:「アダプターのコンテンツが変更されましたが、ListView は通知を受け取りませんでした」アダプターのコンテンツがバックグラウンド スレッドからではなく、UI スレッドからのみ変更されていることを確認してください。

runOnUiThread()を試してみたかったのですが、明らかに ListFragment では機能しませんが、ListActivity では機能しません...私の場合はそうではありません。

履歴書:この 2 つの問題は、onLoadingBackground() のプロセスと onLoadingFinish() のプロセスがうまく解決できないためだと思います。:S

そして... 私は使っています... 私はandroid:configChanges="orientation|screenSize"気分が悪い、それは不正行為です!!! xD

念のため... 私は Volley を使用していません。なぜなら、JAVA/Android のロジックについてもっと学びたいからです。また、Volley で問題が発生した場合に...質問に答える人が少ないからです :S

私はこれを求めたくありませんでしたが... 数時間前に投稿を読みました.

なに???そして、私はこれで 3 週間以上立ち往生しています。:S (下手な英語でごめんなさい... がんばっています、スペイン語を話します)

そして、誰かがこれらのコードを必要とする場合...

.

編集: loadInBackground()

アクティビティからこの Listfragment に戻り、アイテムを選択すると、loadInBackground がアダプターのコンテンツを変更し、コンテンツを更新しないため、アプリがクラッシュしました。さて、これでif else ...アダプターがnullかどうかをチェックし、loadInBackgroundを実行するかどうかを確認するため、アプリはクラッシュしませんが...

私がやった方法は...おそらく最も適切な方法ではないと思います.私はそこに到達していませんが、結果を更新または追加したいときは...この方法はうまくいかないかもしれません. ヘルプ/例はありますか?

.

新規: onConfigurationChanged()

私は不正行為をしていたので、android:configChanges="orientation|screenSize"試してみましたが、これがマニフェストに残っているonConfigurationChanged()場合にのみ機能/応答します。configChangesしたがって、この問題は、loadInBackground() を解決しようとする方法に関係していると思いますが、よくわかりません。

一方...私onCreateはMainActivityの作成について多くのことを読んで、 savedInstanceStatenullかどうかを確認してから、「getSupportFragmentManager()。beginTransaction()。findFragmentByTag()」のようなものを使用し、試してみると...私の MainActivity ではmiPagerAdapter = new funcionPagerAdapter(getSupportFragmentManager());、おそらく私の場合は...別の方法で解決すると思うので、このことは機能しないことがわかりました...しかし、方法がわかりません! :S

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

android - Android Google Place API 付近のバス路線

近くのバス路線を表示する必要がある Android アプリに取り組んでいます。Google Place API を試してみましたが、うまくいきました。しかし、ロードに時間がかかりすぎるようです。私がしたことは次のとおりです。

1- asyncTaskLoader を作成して、次の URI を要求し、すべての「参照」を取得します

maps.googleapis.com/maps/api/place/search/json?sensor=false&radius=500&types=bus_station&location=-33.8670522,151.1957362&key=AIzaSyCLt9AhFhVnU-HZJyfWJeaWCMc7G1IbBnU

2- ステップ 1 が終了したら、N 個の asyncTaskLoader を作成して、「url」を取得するためにステップ 1 で受け取った N 個の参照で次の URI を要求します。

maps.googleapis.com/maps/api/place/details/json?reference=reference_receive_from_step_1&sensor=false&key=AIzaSyCLt9AhFhVnU-HZJyfWJeaWCMc7G1IbBnU

3- ステップ 2 が終了したら、N 個の asyncTaskLoader を作成して次の URI をリクエストし、DOM を解析してページに表示されるルートを取得します。

https://maps.google.com/maps/place?cid=4580863912681127574

したがって、ステップ 1 で 20 個の結果が得られたとします。つまり、20 個の参照があるため、URL を取得するために 20 個の asyncTaskLoader(s) を作成し、ルートを取得するために 20 個の asyncTaskLoader(s) を作成する必要があります。複雑すぎて、リクエストが多すぎたようです。

別のより良い解決策はありますか?ありがとう!

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

android - サポート ライブラリの AsyncTaskLoad はキャンセルをサポートしていませんか?

v13 サポート ライブラリを使用していますが、isLoadInBackgroundCanceledやなどのキャンセルをサポートするために必要なすべての機能cancelLoadInBackgroundが完全に欠落しています。

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

java - AndroidでJavaを使用したAsyncTaskLoaderによるリモートログイン?

私は Android の初心者です。Activity で拡張されたクラスがあります。私の質問は、Activity から AsyncTaskLoader を呼び出す方法です。AsyncTaskLoader クラスと、入力された情報が正しい場合にユーザーのステータスを取得する WebService クラスを作成しました。 Activity クラスから AsyncTaskLoader を呼び出すことができません。

ローダークラス:

LoginListService 関数: