加载数据时ProgressDialog

时间:2013-08-02 22:26:04

标签: java android

我在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出现并消失,但后台没有任何反应。以下是我的应用程序的几个图片:

Before ProgressDialog

这是在progressdialog到来之前。

当我按下计算时:

When I press calculate

progressdialog结束后:

After the progressdialog goes

正如您所看到的,在progressdialog消失后,我的值不会转换。

在我的代码中,

convertvalues("USD", "EUR");

只是从互联网获取实际货币值,并将其与我的edittext中的值相乘。没有任何问题,它没有progressdialog。我自己测试了很多次。

我在这里做错了什么?我已经检查了Google超过一周,但我找不到一个解决方案。非常感谢任何有关此问题的帮助。

3 个答案:

答案 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;
        }
}

然后用

调用此asynctask
new asyncTask(Your_Context).execute();