Android Studio中将服务端存储的CSV文件转换为JSON的实现咨询
服务端CSV转JSON实现方案
1. 前置配置
首先要在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <!-- 如果服务端是http明文协议,Android 9及以上需要额外添加配置 --> <application ... android:usesCleartextTraffic="true"> ... </application>
如果使用OkHttp作为网络请求框架、Gson做JSON序列化,需要在模块级build.gradle中添加依赖:
dependencies { implementation 'com.squareup.okhttp3:okhttp:4.10.0' implementation 'com.google.code.gson:gson:2.10.1' }
2. 核心逻辑调整
你原有代码的CSV解析逻辑可以完全复用,只需要把本地资源输入流替换为服务端请求返回的输入流即可。注意网络请求必须在子线程执行,示例代码如下:
// 子线程执行网络请求,避免主线程阻塞 new Thread(() -> { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() // 替换为你的服务端CSV文件实际地址 .url("http://your-server-address/target.csv") .build(); try { Response response = client.newCall(request).execute(); if (!response.isSuccessful()) { throw new IOException("网络请求失败,错误码:" + response.code()); } // 拿到服务端返回的输入流,后续解析逻辑和你原有逻辑完全一致 InputStream is = response.body().byteStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); String line = ""; List<WeatherSample> weatherSamples = new ArrayList<>(); // 跳过表头行 reader.readLine(); while ((line = reader.readLine()) != null) { String[] tokens = line.split(","); WeatherSample sample = new WeatherSample(); sample.setLeftHipAngle(Double.parseDouble(tokens[0])); sample.setLeftKneeAngle(Double.parseDouble(tokens[2])); sample.setRightHipAngle(Double.parseDouble(tokens[4])); sample.setRightKneeAngle(Double.parseDouble(tokens[6])); sample.setRealTime(Double.parseDouble(tokens[8])); weatherSamples.add(sample); } // 解析完成后直接转JSON字符串 Gson gson = new Gson(); String jsonResult = gson.toJson(weatherSamples); // 如需更新UI,切回主线程操作 runOnUiThread(() -> { // 这里处理JSON结果,比如存储、展示、上传等 Log.d("转换结果", jsonResult); }); } catch (IOException e) { Log.wtf("MyActivity", "处理CSV文件出错", e); e.printStackTrace(); } }).start();
3. 注意事项
- 禁止在主线程执行网络请求,Android 4.0及以上系统会直接抛出主线程网络异常
- 如果CSV字段存在包含逗号的特殊场景,建议使用专门的CSV解析库(比如OpenCSV)替代
split(",")的手动解析逻辑,避免解析错误 - 服务端CSV的编码要和代码中指定的编码一致,否则会出现中文乱码
内容的提问来源于stack exchange,提问作者NekoSenpai
相关产品推荐
相关产品推荐

