gpt4 book ai didi

java - Edittext 和 ProgressDialog 均不出现

转载 作者:行者123 更新时间:2023-12-01 14:17:11 25 4
gpt4 key购买 nike

我遇到了一个问题,我的进度对话框不显示或不执行任何操作。我正在制作一个可以转换值的货币转换器。这是我的代码:

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
while (edittextdollars.equals("")) {
final ProgressDialog myPd_ring=ProgressDialog.show(getActivity(), "", "Loading...", true);
myPd_ring.setCancelable(true);
new Thread(new Runnable() {
@Override
public void run() {
try
{
convertvalues("USD", "EUR");
}catch(Exception e){

}
myPd_ring.dismiss();
}
}).start();
}
}

没有进度对话框,如显示:

    if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {

convertvalues("USD", "EUR");

}

它可以工作,但在值返回之前按下“计算”按钮几秒钟。我想要一个进度对话框来显示该值正在加载。我搜索过谷歌,但没有任何效果。感谢任何有关此问题的帮助。

附注我更希望您发布代码,而不是只说没有任何代码的解决方案。另外,请发布您认为对我有帮助的任何网站(例如教程)。再次感谢。

编辑:

当我添加此代码时:

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
myPd_ring = ProgressDialog.show(getActivity(), "", "Loading...", true, true);
new Thread(new Runnable() {
@Override
public void run() {
try {
convertvalues("USD", "EUR");
} catch(Exception e) {

}

}
}).start();
}

@Override
public void afterTextChanged(Editable arg0) {
myPd_ring.dismiss();
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}

我已经实现了TextWatcher,但它不起作用。进度对话框永远保留在那里,并且值不会改变。任何帮助将不胜感激。

最佳答案

你的做法是不正确的。

while (edittextdollars.equals("")) { // this while loop is not the way to wait for calculation finish...inside this while loop you are spwaning a thread which is not correct
final ProgressDialog myPd_ring=ProgressDialog.show(getActivity(), "", "Loading...", true); //here you are showing the dialog
myPd_ring.setCancelable(true);
new Thread(new Runnable() {
@Override
public void run() {
try {
convertvalues("USD", "EUR");
} catch(Exception e) {

}
myPd_ring.dismiss(); // the run method can be called within few milliseconds of starting the thread..so in essence immediately you are removing your dialog
}
}).start(); // just after showing the dialog you are starting the thread
}

我建议进行以下更改(我假设您的方法 convertvalues 是更改 edittexteuros 文本的方法):

<强>1。在您的 Activity 类中声明 myPd_ring

ProgressDialog myPd_ring = null; 

<强>2。让您的 Activity 实现 TextWatcher(添加未实现的方法)

public class YourActivity extends Activity implements TextWatcher

<强>3。使用 EditText edittexteuros 添加 TextWatcher。

edittexteuros = (EditText) findViewById(R.id.youreditTextId);
edittexteuros.addTextChangedListener(YourActivity.this);

<强>4。计算部分并显示对话框

if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length() == 0) {
myPd_ring = ProgressDialog.show(getActivity(), "", "Loading...", true, true);
new Thread(new Runnable() {
@Override
public void run() {
try {
convertvalues("USD", "EUR");
} catch(Exception e) {

}

}
}).start();
}

<强>5。 afterTextChanged

中关闭 Dialog
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
myPd_ring.dismiss();
}

编辑:

您确定current始终是有效值吗?作为预防措施,您需要在出现异常时显示一些错误文本(您始终需要设置一些文本,否则对话框将永远不会关闭)。请调试并检查您是否始终从网络获得正确的响应。我给你的代码在我的测试设置中运行得很好,所以你的问题现在可能出在其他地方。您需要调试并找出答案。

YahooCurrencyConverter ycc = new YahooCurrencyConverter();                  
try {
current = ycc.convert(convertfrom, convertto);
edittexteuros.setText(df.format(val*current));
return "passed";
} catch (Exception e) {
edittexteuros.setText("some error message");
return "passed";
}

关于java - Edittext 和 ProgressDialog 均不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com