0

main.xmlに1つのボタンがあり、サーバーからの情報を含む別のxmlにリンクします。システムが情報をロードしている間、空白の画面を避けるためにプログレスバーを含めます。私はすでに以下のコードを実行しましたが、それでも私が望んでいたことではありません。以下のコードは1000ミリ秒間「待機」し、次のコードのみを実行します。「待機時間」の読み込みがインターネットの速度に依存するように変更するにはどうすればよいですか。インターネット接続が遅い場合は、プログレスバー画面が長く表示されます。

package com.android.myApps;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;

public class MainScr extends Activity {

    private final int WAIT_TIME = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {       
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.MainScr);       
    }   

    public void onClickCategory(View view)
    {
        findViewById(R.id.mainSpinner1).setVisibility(View.VISIBLE);
        new Handler().postDelayed(new Runnable(){
            @Override
                public void run() {                          
                      Intent mainIntent = new Intent(MainScr.this, Category.class); 
                      MainScr.this.startActivity(mainIntent); 
                      MainScr.this.finish(); 
                      } 
            }, WAIT_TIME);
    }
}
4

2 に答える 2

12

ここで行っている間違いは、特定の時間をコードにダンプしていることです。応答を得るのにどれだけかかるかはわかりません。次のアプローチに従う必要があります

ステップ1画面に進行状況ダイアログを表示する

ステップ2ダウンロードには時間がかかりますが、新しいスレッドで実行する必要があります

ステップ3ダウンロードが完了すると、タスクが完了したというメッセージが表示されます。次に、進行状況ダイアログを削除して続行します。

ここにサンプルコードを貼り付けています。お役に立てば幸いです。

package com.android.myApps;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class MainScr extends Activity
{
    private Handler handler;
    private ProgressDialog progress;
    private Context context;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        context = AncActivity.this;
        progress = new ProgressDialog(this);
        progress.setTitle("Please Wait!!");
        progress.setMessage("Wait!!");
        progress.setCancelable(false);
        progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);

        handler = new Handler()
        {

            @Override
            public void handleMessage(Message msg)
            {
                progress.dismiss();
                Intent mainIntent = new Intent(context, Category.class);
                startActivity(mainIntent);
                super.handleMessage(msg);
            }

        };
        progress.show();
        new Thread()
        {
            public void run()
            {
                // Write Your Downloading logic here
                // at the end write this.
                handler.sendEmptyMessage(0);
            }

        }.start();

    }

}
于 2012-06-01T04:27:18.323 に答える
2

Asyntaskを試しましたか?あなたの実行プロセスはUIで更新されます。

public final class HttpTask
        extends
        AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> {

    private HttpClient mHc = new DefaultHttpClient();

    @Override
    protected String doInBackground(String... params) {
        publishProgress(true);
        // Do the usual httpclient thing to get the result
        return result;
    }

    @Override
    protected void onProgressUpdate(Boolean... progress) {
        // line below coupled with 
        //    getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS) 
        //    before setContentView 
        // will show the wait animation on the top-right corner
        MyActivity.this.setProgressBarIndeterminateVisibility(progress[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        publishProgress(false);
        // Do something with result in your activity
    }
}
于 2012-06-01T04:22:42.663 に答える