インターネットからデータを取得して解析し、ユーザーに表示しようとしています。アクションには通常3秒ほどかかります。スピナーのProgressDialogに、データを読み込んでいることを示すメッセージを表示したいと思います。問題は、ProgressDialogがロードがほぼ完了したときにのみ表示されることです。これは私のコードです
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button load_routes = (Button)findViewById(R.id.load_routes);
load_routes.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
task_complete = false;
progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(false);
progressBar.setMessage("Fetching routes data ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.show();
if(haveNetworkConnection())
{
loading_routes_data(v);
}
else
{
progressBar.dismiss();
}
}
});
}
そしてこれはonclickと呼ばれる私の関数です
private void loading_routes_data(View v)
{
try
{
new Thread(new Runnable()
{
public void run()
{
while(!task_complete)
{
refresh_routes();
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
runOnUiThread(new Runnable()
{
public void run()
{
progressBar.dismiss();
}
});
}
}).start();
}
catch(Exception e)
{
}
while(!task_complete)
{
}
}
私のrefresh_routes()
関数はデータを取得し、それを解析してからに設定task_complete
しtrue
ます。whileループ内に保持する必要があるかどうかさえわかりません。
それが私の大きな問題です。ProgressDialog
ボタンをクリックするとすぐに表示したいのですが、電話をかけたいのですがrefresh_routes()
、refresh_routes()
完了したら進行状況ダイアログを削除したいと思います。しかし、どうすればそれができるのかわかりません。
誰かが例としていくつかの記事などで問題を解決する方法を教えてくれたら、私は本当に感謝します。前もって感謝します :)