我在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);
}
});
答案 0 :(得分:0)
我真的建议使用Handler
而不是Thread。实际上不鼓励使用Thread.sleep
方法。这样的事情要好得多:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
HealthySubObject hsObject = new HealthySubObject();
myProgressDialog.dismiss();
}
}, 5000);
答案 1 :(得分:0)
问题是您需要在UI线程上修改UI,并且在Thread的run()方法中,您处于“后台”线程中。当您需要访问UI线程时,请尝试在线程内部使用处理程序。