【发布时间】:2014-06-26 13:54:30
【问题描述】:
这周我开始了 Android 编程,这就是我想通过我的第一个应用程序实现的目标。我是 Java 和 Android 的新手,但我有一些 Python 经验。
我的 raspberryPi 上运行了一个 python 服务器,根据收到的命令,它会淡化一堆 RGB LED。
我现在正在尝试构建一个通过套接字向服务器发送命令的 Android 应用。
有一个输入框和一个按钮:当按下按钮时,我希望将输入的数据发送到服务器。
我写了它并且它有效,但我相信我的实现有问题。我希望应用程序打开一个套接字连接,并在保持打开状态的同时向服务器发送命令。
单击时,按钮会将输入的命令和服务器地址传递给 ASyncTask,然后 ASyncTask 打开与服务器的连接并发送命令。但是,要发送新命令,必须关闭并再次打开连接,并再次调用 ASyncTask。
我不需要这个:连接应该一直保持打开状态。
这是我的代码(重要部分):
当按钮被点击时,这会获取输入并将其发送到 ASyncTask:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText inputText = (EditText) findViewById(R.id.editText2);
final Button sendButton = (Button) findViewById(R.id.button);
final TextView text = (TextView) findViewById(R.id.textView3);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String outputText = inputText.getText().toString().concat("\n");
text.append(outputText);
ConnectTask task = new ConnectTask();
task.execute("192.168.1.3:1322", inputText.getText().toString());
}
});
这是我的 ASyncTask 子类:
private class ConnectTask extends AsyncTask<String, Void, Void>{
@Override
protected Void doInBackground(String... strings){
String[] spl = strings[0].split(":");
String address = spl[0];
int port = Integer.parseInt(spl[1]);
SocketAddress sockaddr = new InetSocketAddress(address, port);
Socket socket = new Socket();
try{
socket.connect(sockaddr, 5000);
} catch (IOException e){
e.printStackTrace();
}
OutputStream os = null;
try {
os = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
try {
bw.write(strings[1]);
} catch (IOException e) {
e.printStackTrace();
}
try {
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
提前感谢您的帮助!
【问题讨论】:
-
我怀疑您想在 AsyncTask 之外打开 Socket 连接,并在创建时将其传递给 AsyncTask。这将允许它在您需要时出现,而不是关闭连接。
-
我该怎么做? Android 不允许我在主 Activity 中创建连接。
标签: java android sockets android-asynctask