使用Android中的HTTP GET方法逐行发送TextFile

时间:2015-09-25 08:44:15

标签: android get

我知道,这不是从Android设备向web服务器发送文本文件的最佳方法,但我无法在服务器端更改任何内容,我必须坚持使用此方法。 让我解释一下:

文本文件是一个命令列表。我将阅读第一行并发送它:

http://1.2.3.4/?command=FirstLineOfTheTextfile

服务器的答案非常简单JSON,如下所示:

{“OK”:true}或{“OK”:false}

根据答案(TRUE或FALSE),我想重新发送命令或读取下一行并以相同的方式发送:

http://1.2.3.4/?command=SecondLineOfTheTextfile

直到文本文件的最后一行。

我在APP中完成了以下操作:

  1. 扫描AP
  2. 连接到它
  3. 阅读文件
  4. 发送第一行
  5. 解析答案
  6. 但是,我不知道最好的方法是什么:

    发送命令

    等待答案

    如果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()
            }
        }
    };
    

1 个答案:

答案 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。它是有史以来最糟糕的客户端 - 服务器架构。