在循环中将 GPS 坐标写入 SQL 服务器



我正在尝试将坐标发送到我设置的本地SQL服务器。在设备上,用户记录了一个轨迹,它由纬度/纬度元组组成,否则...他们可以单击上传以发送到服务器。在下面的代码中,我尝试使用 BufferedWriter 循环写入服务器,遍历每个纬度/纬度元组。但是,当我查看实际发送到服务器的内容时,即使我循环了 X 次,也只发送了一个条目。看来我可能会不断覆盖 BufferedWriter。有关如何发送所有数据的任何帮助将不胜感激!我一直在遵循本教程:https://www.youtube.com/watch?v=cOsZHuu8Qog&index=2&list=PLshdtb5UWjSppGmM3IdygV6RusjU3KjlZ

try {
            URL url = new URL(upload_track_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            ArrayList<TrackDataEntry> trackDataEntryArrayList = skiCompanionDatabase.getDataFromTrackID(trackID);
            Log.d(Constants.SkiCompanionDebug, "track data entries: " + trackDataEntryArrayList.size());
/////////PROBLEM HERE, keeps overwriting BufferedWriter... I think ///////////
            for (int i = 0; i < trackDataEntryArrayList.size(); i++) {
                String data = URLEncoder.encode("user_id", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8") + "&" +
                        URLEncoder.encode("track_id", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackID), "UTF-8") + "&" +
                        URLEncoder.encode("latitude", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackDataEntryArrayList.get(i).getLatitude()), "UTF-8") + "&" +
                        URLEncoder.encode("longitude", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackDataEntryArrayList.get(i).getLongitude()), "UTF-8") + "&" +
                        URLEncoder.encode("altitude", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackDataEntryArrayList.get(i).getAltitude()), "UTF-8") + "&" +
                        URLEncoder.encode("speed", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackDataEntryArrayList.get(i).getSpeed()), "UTF-8") + "&" +
                        URLEncoder.encode("timestamp", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(trackDataEntryArrayList.get(i).getTime()), "UTF-8");
                bufferedWriter.write(data);
                //bufferedWriter.newLine();
                bufferedWriter.flush();
            }

            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();
            inputStream.close();
            trackUploadSuccess = true;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

可能是因为您尝试使用多个(trackDataEntryArrayList.size()(key-values对具有相同键的POST数据发送到服务器:在POST数据的每个for (int i = 0; i < trackDataEntryArrayList.size(); i++) { ...步骤中添加相同的"user_id"(以及其他例如 "track_id""latitude"等(键,并且在服务器端只能为每个唯一键提取一个值。为了避免这种情况,您应该在循环for (int i = 0; i < trackDataEntryArrayList.size(); i++) {中创建请求 - 糟糕的解决方案,或者 - 更好的解决方案 - 使用 JSON 数组将数据发送到服务器,例如,如本文或 Breno Henrique 的回答。您的教程可以满足您的所有功能,但它描述了只有一个"块"的情况 key-values ,没有 for 循环。

最新更新