在Android开发中,与服务器进行交互是常见的需求,而Node.js作为流行的服务器端开发框架,经常被用来构建API接口。本示例介绍如何从Android应用向由Node.js编写的服务器发送数据,并接收服务器的响应。 让我们分析Node.js服务器端的代码。这里使用了内置的HTTP模块创建了一个HTTP服务器,监听8888端口。当接收到请求时,服务器会捕获请求体的数据(`request.on('data', function(chunk){...}`),并在请求结束时将其解析为JSON格式。解析后的数据可以通过`console.log`打印出来,同时服务器向客户端返回一个200状态码和"请求成功"的文本响应。 ```javascript var http = require("http"); var fs = require("fs"); var queryString = require('querystring'); var url = require('url'); var util = require('util'); http.createServer(function (request, response) { // ... }).listen(8888); console.log("服务器启动"); ``` 服务器还包含一个名为`writeFile`的辅助函数,用于将接收到的数据写入到指定路径的文件中。这在实际项目中可能用于日志记录或其他持久化存储需求。 接下来,我们看Android应用的部分。这部分代码使用了Android的HttpURLConnection类来发起网络请求。`MainActivity`中定义了一个TextView和一个Button,Button的点击事件触发发送请求的操作: ```java public class MainActivity extends AppCompatActivity { // ... Button button= (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendRequest(); } }); } ``` `sendRequest()`方法是发送请求的核心,它包含了建立连接、设置请求头、写入请求体和读取响应的过程: ```java private void sendRequest() { new Thread(new Runnable() { @Override public void run() { try { // 创建URL对象 URL url = new URL("http://localhost:8888"); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为POST connection.setRequestMethod("POST"); // 设置允许输出 connection.setDoOutput(true); // 设置允许输入 connection.setDoInput(true); // 设置请求头 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 写入请求体 OutputStream outputStream = connection.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(outputStream, "UTF-8")); String data = "body=测试数据"; writer.write(data); writer.flush(); writer.close(); outputStream.close(); // 获取响应码 int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // 读取响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder content = new StringBuilder(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } in.close(); // 更新UI runOnUiThread(new Runnable() { @Override public void run() { textView.setText(content.toString()); } }); } else { // 处理错误 Log.e("MainActivity", "Error: " + responseCode); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } ``` 这段代码创建了一个新的线程来执行网络操作,以避免阻塞UI主线程。它首先构造了一个POST请求,然后将数据写入请求体,最后读取服务器的响应并更新UI。 总结来说,这个示例展示了如何使用Android的HttpURLConnection与Node.js服务器进行基本的HTTP通信。在实际项目中,可能还需要处理更复杂的请求格式(如JSON)、错误处理、SSL连接、超时设置等。此外,对于生产环境,通常会使用如Retrofit或OkHttp这样的库来简化网络请求的实现。
- 粉丝: 6
- 资源: 967
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助