Android AsyncTaskで作業しています。プログラムのロード中にプログレスバーを作成したいと考えています。ここで私はそれを作る方法です。AsyncTaskで生成されたデータを保持する方法は?
A class is declared here...
private ArrayList<String> result1 = new ArrayList<String>(); //class variable
onCreate()
{
Some stuff here...
new ATask().execute();
for (int i = 0; i <result1.size();i++)
{
output = output +result1.get(i) + "\n\n";
}
textView.setText(output);
}
private void do0()
{
ArrayList<Sentence> result = new ArrayList<Sentence>();
ArrayList<String> result2 = new ArrayList<String>();
result = do1("link", true); //just some function I am working
result1 = do2(result,10);//do2 return ArrayList<String>
}
private class ATask extends AsyncTask<String, Void, String>{
private ProgressDialog progress = null;
@Override
protected String doInBackground(String... params) {
do0();
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String result) {
progress.dismiss();
//adapter.notifyDataSetChanged();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
progress = new ProgressDialog(ReadWebPage.this);
progress.setMessage("Doing...");
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.show();
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
};
私の意図は、プログレスバーが読み込まれている間、それはdo0()
を終了し、result1
を変更し、その後、私のoncreate
はresult1
がそれに表示することTextView
だと使用することができます、ということです。ただし、この設定では私のTextView
は常に空です。だから私はdo0()
(右後result1 = do2()
)に
for (int i = 0; i <result1.size();i++)
{
output = output +result1.get(i) + "\n\n";
}
textView.setText(output);
を移動するが、その後、プログラムがクラッシュします。私はこれらのスレッドの設定に精通していない、事前にあなたの助けをありがとう。
ありがとう、これは、コードのより良い使い方が、私はサンプルコードから使用する1つを取得します。私はこれにはあまり慣れていませんが、より成熟したコーディング能力が得られたら、あなたのアプローチはすべきだと思います。あなたのお勧めをありがとう。 – JLTChiu