【发布时间】:2012-01-11 11:43:21
【问题描述】:
我在 android 中创建了一个 ProgressDialog,当我做一个简单的例子时它就可以工作。
例如,这是可行的。
public void onClick(View v)
{
// Perform action on click
System.out.println("Progess Bar");
final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
"Please wait...", "Getting updates...", true);
new Thread()
{
public void run()
{
try
{
// Do some Fake-Work
sleep(5000);
}
catch (Exception e)
{
}
// Dismiss the Dialog
myProgressDialog.dismiss();
}
}.start();
}
但是,一旦我添加了对自定义类的引用,它就会停止运行这个新线程。
button1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// Perform action on click
System.out.println("Progess Bar");
// Display an indeterminate Progress-Dialog
final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
"Please wait...", "Getting Updates...", true);
new Thread()
{
public void run()
{
try
{
HealthySubObject hsObject = new HealthySubObject();
// Do some more work with my hsObject - nothing happens after this point.
sleep(5000);
}
catch (Exception e)
{
}
// Dismiss the Dialog
myProgressDialog.dismiss();
}
}.start();
}
});
发生的情况是,只要我单击此按钮,进度对话框就会在屏幕上快速闪现,然后消失。但是如果你看我的代码,它应该在消失之前等待 5 秒。我在引用自定义类之前和之后放置了调试语句,我可以看到之前的语句,但看不到之后的语句。有谁知道为什么会这样?只要我的课程是公开的,我就应该可以从新线程中调用它,对吗?
我对 android 还是很陌生,这是我对多线程 android 应用程序的第一次冒险。任何帮助将非常感激。
解决方案
感谢大家的帮助。它现在正在工作。
button1.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// Perform action on click
System.out.println("Progess Bar");
//ProgressDialog dialog = ProgressDialog.show(AndroidTestApplicationActivity.this, "", "Loading. Please wait...", true);
// Display an indeterminate Progress-Dialog
final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
"Please wait...", "Doing Extreme Calculations...", true);
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
HealthySubObject hsObject = new HealthySubObject();
ArrayList<HashMap<String, String>> onlineDB = hsObject.jsonToArray();
//
// more stuff goes here.
//
//
myProgressDialog.dismiss();
}
}, 1500);
}
});
【问题讨论】: