我如何通过逻辑将文本说成一次?

时间:2015-09-05 11:28:16

标签: java c# .net winforms

在c#的电脑上,这是我有这部分的网络服务器:

private void cases()
{
    if (request.QueryString[0] == "uploadstatus")
                    {
                        switch (Youtube_Uploader.fileuploadstatus)
                        {
                            case "uploading file":
                                return "uploading";

                            case "file uploaded successfully":
                                Youtube_Uploader.fileuploadstatus = "";
                                return "upload completed";

                            default:
                                return "upload unknown state";
                        }
                    }
}

然后我在客户端使用android studio这个代码:

Runnable serverChecksRunnable = new Runnable()
    {
        @Override
        public void run()
        {
            if (connectedSuccess == true)
            {

                checkServer = Get(iptouse + "uploadstatus");

            }

            Handler h=new Handler(Looper.getMainLooper());
            h.post(new Runnable()
            {
                @Override
                public void run()
                {
                    if (connectedSuccess)
                    {
                        if (checkServer != null)
                        {
                            String a = null;
                            try
                            {
                                a = new String(checkServer, "UTF-8");
                                textforthespeacch = a;
                                if (textforthespeacch.equals("upload completed"))
                                    MainActivity.this.initTTS();
                                if (textforthespeacch.equals("uploading"))
                                {
                                    servercheckCounter += 1;
                                    if (servercheckCounter == 1)
                                    {
                                        MainActivity.this.initTTS();
                                    }
                                }


                                servercheckCounter = 0;
                            } catch (UnsupportedEncodingException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }

                }
            });

            customHandler.postDelayed(serverChecksRunnable,1000);
        }
    };

此行每秒向网络服务器发送一个命令:

checkServer = Get(iptouse + "uploadstatus");

回到电脑这是工作部分:网络服务器,当我的情况是“文件上传成功”我然后重置变量Youtube_Uploader.fileuploadstatus =“”;为空字符串结果是它会返回“上传完成”;只有一次。

问题在于上传时间。 当案例是:在网络服务器上“上传文件”时,它会继续说每秒“上传”,但我希望它只会说“上传”一次。

我也试图像这样重置变量:

                        case "uploading file":
                        Youtube_Uploader.fileuploadstatus = "";
                        return "uploading";

但它每秒都在说“上传”。 我在java中尝试了客户端代码进行一些检查:

if (textforthespeacch.equals("upload completed"))
                                    MainActivity.this.initTTS();
                                if (textforthespeacch.equals("uploading"))
                                {
                                    servercheckCounter += 1;
                                    //if (servercheckCounter == 10)
                                    //{
                                    if (servercheckCounter == 1)
                                    {
                                        MainActivity.this.initTTS();
                                    }

                                    //  servercheckCounter = 0;
                                    //}
                                }

所以如果它完成它只能说一次工作正常。 但是当它上传时,它每秒都会“上传”。

另一个问题可能是我第一次希望它每隔10秒说“上传”,但网络服务器可能会在10秒钟之前上传它。

所以我找不到合适的逻辑以及如何使其发挥作用。 我想我想做到这一点,它会说出每个状态一次:

“上传”

“上传完成”

但我无法让每个状态只说一次。

1 个答案:

答案 0 :(得分:0)

解决此问题的最简单方法是保持一个布尔状态,告知是否已经说过“上传”。确保在开始上传时将该状态重置为false,然后,每当“上传”状态到达时,检查布尔值。像这样:

private Boolean uploadAnnounceDone = false;

private void checkUpload()
{
    String status = cases();
    if (status.Equals("uploading"))
    {
        if (!uploadAnnounceDone)
        {
            uploadAnnounceDone = true;
            PlayVoice(status);
        }
    }
    else
        PlayVoice(status);
}

如果您为多次上传重复使用相同的设置,请确保在开始另一次上传时将布尔值重置为False。

请注意,目前您的代码无效; “cases()”函数应该返回该字符串。您将其返回类型设置为void