1

我在我的 Android 应用程序中遇到问题。我正在创建一个货币转换器。我需要创建一个在您将值从一种货币转换为另一种货币时出现的进度对话框。

这是我的代码的一部分:

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

进度对话框出现并消失,但后台没有任何反应。以下是我的应用程序的几张图片:

进度对话框之前

这是在进度对话框出现之前。

当我按下计算时:

当我按下计算

进度对话框完成后:

进度对话框出现后

如您所见,在进度对话框消失后,我的值不会转换。

在我的代码中,

convertvalues("USD", "EUR");

只是从互联网上获取实际货币价值并将其与我的编辑文本中的价值相乘。它没有任何问题,并且它在没有进度对话框的情况下工作。我自己测试过很多次。

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

4

3 回答 3

0

Just like how you update your progressdialog in a handler, you must also update EditTexts in the handler (as it must run on the UI thread). So ideally you would return the result from convertvalues and then pass it to the handler via a message.

于 2013-08-02T22:29:24.257 回答
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;
        }
}

只需调用此异步任务

new asyncTask(Your_Context).execute();
于 2013-08-03T05:56:15.693 回答
0

据我所知,您的代码很好,但是当您关闭对话框时,您没有更新 TextView/EditText 值。这意味着虽然看起来什么都没有发生,但实际上是 - 您只是没有更新以查看结果。

因此,假设convertvalues()转换后的值存储在某处,在您调用之前,dismiss()您应该根据这些值设置您的 TextViews。

于 2013-08-02T22:38:39.243 回答