我在Android应用程序中遇到问题。我正在创建货币转换器。我需要创建一个在将值从一种货币转换为另一种货币时出现的progressdialog。
以下是我的代码的一部分:
if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
dialog1 = ProgressDialog.show(getActivity(), "", "Calculating...");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try{
convertvalues("USD", "EUR");
handler.sendEmptyMessage(0);
}
catch (Exception e) {
edittexteuros.setText("Error");
}
}
});
thread.start();
}
private Handler handler = new Handler () {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
dialog1.dismiss();
break;
}
}
};
progressdialog出现并消失,但后台没有任何反应。以下是我的应用程序的几个图片:
这是在progressdialog到来之前。
当我按下计算时:
progressdialog结束后:
正如您所看到的,在progressdialog消失后,我的值不会转换。
在我的代码中,
convertvalues("USD", "EUR");
只是从互联网获取实际货币值,并将其与我的edittext中的值相乘。没有任何问题,它没有progressdialog。我自己测试了很多次。
我在这里做错了什么?我已经检查了Google超过一周,但我找不到一个解决方案。非常感谢任何有关此问题的帮助。
答案 0 :(得分:0)
就像在处理程序中更新progressdialog一样,您还必须更新处理程序中的EditTexts(因为它必须在UI线程上运行)。理想情况下,您将从convertvalues返回结果,然后通过消息将其传递给处理程序。
答案 1 :(得分:0)
从我所看到的,您的代码很好,但是当您关闭对话框时,您不会更新TextView / EditText值。这意味着虽然看起来没有任何事情发生,但实际上是 - 你只是没有更新才能看到结果。
因此,假设convertvalues()
已将转换后的值存储在某处,在调用dismiss()
之前,您应该根据这些值设置TextView。
答案 2 :(得分:0)
你可以在android中使用asynctask
看下面的代码可能会对你有帮助..
private class asyncTask extends AsyncTask<Void, Void, Boolean>
{
Context context;
ProgressDialog pd;
asyncTask(Context context)
{
this.context = context;
pd = new ProgressDialog(activityContext);
}
protected void onPreExecute()
{
pd.setTitle("Loading..");
pd.setMessage("Please wait ...");
pd.setCancelable(false);
pd.show();
}
protected void onPostExecute(Boolean result)
{
if(pd.isShowing()) pd.dismiss();
}
@Override
protected Boolean doInBackground(Void... params)
{
convertvalues();
return boolean_value;
}
}
然后用
调用此asynctasknew asyncTask(Your_Context).execute();