我知道,这不是从Android设备向web服务器发送文本文件的最佳方法,但我无法在服务器端更改任何内容,我必须坚持使用此方法。 让我解释一下:
文本文件是一个命令列表。我将阅读第一行并发送它:
http://1.2.3.4/?command=FirstLineOfTheTextfile
服务器的答案非常简单JSON,如下所示:
{“OK”:true}或{“OK”:false}
根据答案(TRUE或FALSE),我想重新发送命令或读取下一行并以相同的方式发送:
http://1.2.3.4/?command=SecondLineOfTheTextfile
直到文本文件的最后一行。
我在APP中完成了以下操作:
但是,我不知道最好的方法是什么:
发送命令
等待答案
如果FALSE再次发送
如果为TRUE发送下一个命令
等待答案
如果FALSE再次发送
如果为TRUE发送下一个命令
等待答案 。 。 等等
任何建议表示赞赏! :)
目前,我使用第一个和第二个命令执行此操作:
public void CheckStatus() {
TextView actualAction = (TextView) findViewById(R.id.action);
if (filePath != "") {
actualAction.setTextColor(getResources().getColor(R.color.green));
actualAction.setText("Getting STATUS information...");
sendCommand("http://1.2.3.4/?action=A"); //FIRST LINE OF THE TEXTFILE
} else {
actualAction.setTextColor(getResources().getColor(R.color.red));
actualAction.setText("Choose a file first!");
}
}
public void switchTheLightOn() {
okStatus = false;
TextView actualAction = (TextView) findViewById(R.id.action);
actualAction.setTextColor(getResources().getColor(R.color.green));
actualAction.setText("Switching to UPDATE mode...");
sendCommand("http://1.1.1.1/?action=on"); //SECOND LINE OF THE TEXTFILE
}
解析答案时:
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
TextView clientanswer = (TextView) findViewById(R.id.clientanswer);
String message = (String) msg.obj;
try {
JSONObject mainObject = new JSONObject(message);
okStatus = mainObject.getBoolean("OK");
} catch (JSONException e) {
e.printStackTrace();
}
}
String answerText = clientAnswer.toString();
clientanswer.setText(Html.fromHtml(answerText));
if (okStatus) {
switchTheLightOn()
}
}
};
答案 0 :(得分:0)
如何解决方案,我认为最简单的方法是创建一个简单的接口var InputCode = React.createClass({
getInitialState () {
return {
code: '{ "message": "Some JSON input" }'
};
},
updateCode (newCode) {
this.setState({
code: newCode
});
},
render () {
var options = {
lineNumbers: true,
extraKeys: {"Ctrl-Space": "autocomplete"},
mode: {name: "javascript", json: true, globalVars: true},
theme: "sublime-text-like",
viewportMargin: Infinity
};
return <Codemirror value={this.state.code} onChange={this.updateCode} options={options} />;
}
});
,它将成为所有可能命令的基本接口。
Command
然后,您必须通过实现public interface Command {
/** Get text representation for command */
String getCommand();
/** Get description for command */
String getDescription();
}
接口实现所有可能的命令。
例如CommandA:
Command
然后用适当的项初始化你的命令数组。
public class CommandA implements Command {
@Override
String getCommand() {
return "A"
}
@Override
String getDescription() {
return "Getting STATUS information...";
}
}
然后遍历此数组以发送此命令
Command commands = new Command[100];
// TODO fill array
P.S。它是有史以来最糟糕的客户端 - 服务器架构。