バックグラウンドでインターネットからのデータを取得し、進行状況を示す -- android フィールド 関連 問題

Fetching data from Internet in background and showing ProgressDialog or ProgressBar












3
vote

問題

日本語

私はウェブサイトにアクセスする必要があるアプリケーションを開発しています データ、およびデバイス上のデータが表示されます。私はデータを取得したいのです バックグラウンドでインターネットと進行状況を表示します デバイスとアプリケーションがサーバーアプリから応答を受け取ると ダイアログまたはバーを閉じ、データを表示します。

Asynctaskを使用しています -

非同期のコードは次のとおりです -

<事前> <コード> ServerTask extends AsyncTask { @Override protected void onPreExecute() { dialogAccessingServer = new ProgressDialog(ctx); dialogAccessingServer.setMessage(shownOnProgressDialog); dialogAccessingSpurstone.show(); } @Override protected ServerResponse doInBackground(String... urlArray) { String urlString = urlArray[0]; HttpResponse serverResponseObject = null; //finding HttpResponse return serverResponseObject; }//end of doInBackground @Override protected void onPostExecute(HttpResponse serverResponseObject){ dialogAccessingSpurstone.dismiss(); } }

とこのコードを次のように呼び出す -

<事前> <コード> ServerTask serverTaskObject = new ServerTask(); serverTaskObject.execute(); HttpResponse response = serverTaskObject.get();

//応答に対する操作の実行

しかしProgressDialogは表示されていません。(その理由は スレッドが完全ではなく、スレッドがある場合にのみAndroidが無効になっています 完成しました)

私の質問 - 1-私の推測が正しい場合は?もしそうなら、それで私はそれをどのように実装するべきですか? 2-これを行うための他にもっと良い方法がある場合は?

ありがとう

英語

I am developing an application which require accessing a website for data, and will show that data on device. I wants to fetch data from Internet in background and show ProgressDialog or ProgressBar on device and when application receive response from server app will dismiss the dialog or bar and will show data .

For this i am using AsyncTask -

code for AsyncTask is as follows--

ServerTask extends AsyncTask {         @Override         protected void onPreExecute() {                 dialogAccessingServer = new ProgressDialog(ctx);                 dialogAccessingServer.setMessage(shownOnProgressDialog);                 dialogAccessingSpurstone.show();         }          @Override         protected ServerResponse doInBackground(String... urlArray) {                  String urlString = urlArray[0];                 HttpResponse serverResponseObject = null;                  //finding HttpResponse                  return serverResponseObject;          }//end of doInBackground          @Override         protected void onPostExecute(HttpResponse serverResponseObject){                 dialogAccessingSpurstone.dismiss();          }  } 

and calling this code as follows--

ServerTask serverTaskObject = new ServerTask(); serverTaskObject.execute(); HttpResponse response = serverTaskObject.get(); 

//performing operation on response

but ProgressDialog is not shown.(I guess the reason for it is the thread is not complete and android invalidate only when thread has completed).

My Questions -- 1- If my guess is right ? If yes then how I should implement it? 2- If there is any other better way to do this?

thanks

</div
  

回答リスト

2
 
vote

以下は、タスクがバックグラウンドで実行されている間にProgressDialogを表示するテンプレートコードです。

<事前> <コード> class GetTask extends AsyncTask<Object, Void, String> { Context mContext; ProgressDialog mDialog = null; GetPhotoFeedTask(Context context) { mContext = context; } @Override protected void onPreExecute() { super.onPreExecute(); mDialog = new ProgressDialog(mContext); mDialog.setMessage("Please wait..."); mDialog.show(); } @Override protected String doInBackground(Object... params) { // do stuff in background : fetch response } @Override protected void onPostExecute(String result) { super.onPostExecute(result); setProgressBarIndeterminateVisibility(false); // mDialog.dismiss(); } }

new GetTask(this).execute() statement;

を使用して、アクティビティから起動します。

注: ProgressDialog を表示している間に、ユーザーが向きを切り替えるか、またはそのままのイベントを発生させると、コードが破損する可能性があることに注意してください。そのような場合に管理対象ダイアログを使用することをお勧めします。

 

Following is a template code that displays a ProgressDialog while a task is executing in background:

class GetTask extends AsyncTask<Object, Void, String>     {         Context mContext;             ProgressDialog mDialog = null;              GetPhotoFeedTask(Context context)     {         mContext = context;     }          @Override         protected void onPreExecute()         {             super.onPreExecute();               mDialog = new ProgressDialog(mContext);              mDialog.setMessage("Please wait...");              mDialog.show();         }                 @Override         protected String doInBackground(Object... params)         {                   // do stuff in background : fetch response                 }                  @Override         protected void onPostExecute(String result)         {             super.onPostExecute(result);             setProgressBarIndeterminateVisibility(false);             // mDialog.dismiss();                 } } 

and you invoke it from your activity using new GetTask(this).execute() statement;

Note: Note that while displaying a ProgressDialog if the user switches the Orientation or causes event that ensues one, the code might break. It is advised to use Managed Dialogs for such cases.

</div
 
 
       
       
1
 
vote
vote
ベストアンサー
 

UIスレッドの進行状況ダイアログの保留中の作業がある場合、Dialog.Show()はUIスレッドの最後の行であり、さらに作業はonpostexecute()メソッドで行われるべきです。

 

If there is some pending work on UI thread 'Progress dialog' will not appear, so dialog.show() should be the last line on UI thread and any further work should be done in onPostExecute() method.

</div
 
 

関連する質問

59  EclipseをVisual Studioのように振る舞うようにする  ( Making eclipse behave like visual studio ) 
私はいくつかのAndroid開発をしています、そして私はビジュアルスタジオを好みますが、私はこれに eclipse を使う必要があります。 誰かが Eclipse 外観を作ることができるツールを作った、そしてVisual Studioのように見える?私は主にそ...

83  AndroidのHTMLを解析します  ( Parse html in android ) 
私はWebページからAndroidのHTMLを解析しようとしています、そしてそれが結機されていないウェブページから<コード> SAXException 。 AndroidのHTMLを解析する方法はありますか? ...

1  FacebookはAndroid用に接続しています  ( Facebook connect for android ) 
私はAndroid用Facebook Connectのソリューションを探しています。 CodeCarpetからオープンソースソリューションを使用する前に、 http://code.google。 COM / P / FBCONECT-ANDROID / ...

3  強化現実感のためのふるいを使う  ( Using sift for augmented reality ) 
多くのARライブラリ/ SDKS / APIに遭遇しました。このビデオは、説明とコメントから、彼がオブジェクトを検出してそれに従ってください。 私はAndroidのためにそれをする必要があるので、純粋なJavaでのふるいの完全な実装が必要なのです。 私はそれを...

2  Bluetoothchatはうまくいきません  ( Bluetoothchat doesnt work ) 
こんにちは私はAndroidデバイス間の会話をしたいです。私はBluetoothChatを使用してこれを行うのではありませんが、他のデバイスから正しくデータを読み取ることはできません。 会話は: Me:Privet 装置:P. 装置:リベット あなたは私...

3  Androidビデオの意図:コントロールバックボタン?  ( Android video intent control back button ) 
意図を使って、ビデオを再生するAndroidアプリケーションに取り組んでいます。 <事前> <コード> tostart = new Intent(Intent.ACTION_VIEW); tostart.setDataAndType(Uri.parse(mov...

39  AndroidのListActivityでコンテキストメニューをどのように実装しますか?  ( How do you implement context menu in a listactivity on android ) 
LONGクリックでトリガーされたコンテキストメニューを実装しますか、組み込みレイアウトとListAdapterを使用しているListActivityをタップしますか? ...

7  Androidブラウザのリンクでは、常にOnClickが原因として順に実行されない  ( In android browser link does not always execute onclick causing focus instead ) 
私はHREFを使ってリンクのための非常に標準のJSの動作をプログラムしようとしています オンクリックハンドラ、そして私は私がアンドロイドのフォーカス/タッチモードの動作であると信じるものによって引き起こされる奇妙な問題に直面しています。 作業を実行する代わりに...

10  Androidの内部とメモリ/プロセッサの制約は?  ( Android internals and memory processor constraints ) 
Android用スクリーンリーダーの作成を検討しています。私の質問は次のとおりです。 Androidの内部内部の量がJava APIを介して露出していますか?テキストが表示されているときにシステム全体の通知などのものを探しています。カーネルの送信元を変更し、...

0  着信コールを無効にします  ( Disable incoming calls ) 
着信通話を無効にすることは可能です。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有