在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秒钟之前上传它。
所以我找不到合适的逻辑以及如何使其发挥作用。 我想我想做到这一点,它会说出每个状态一次:
“上传”
“上传完成”
但我无法让每个状态只说一次。
答案 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