Java 使用谷歌地图Android-读取CSV文件问题

Java 使用谷歌地图Android-读取CSV文件问题,java,android,google-maps,Java,Android,Google Maps,所以我写了一个基于谷歌地图的活动: 我拥有api凭据,已使用以下代码配置并成功显示地图中的静态地图pin: @Override public void onMapReady(GoogleMap googleMap) { LatLng test = new LatLng(0, 45.505); googleMap.addMarker(new MarkerOptions().position(test) .title

所以我写了一个基于谷歌地图的活动:

我拥有api凭据,已使用以下代码配置并成功显示地图中的静态地图pin:


    @Override
    public void onMapReady(GoogleMap googleMap) {
        LatLng test = new LatLng(0, 45.505);
        googleMap.addMarker(new MarkerOptions().position(test)
                .title("Test Marker"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(test));
}
我有另一个活动以以下格式附加到位于/storage/emulated/0/csvLogs/source.csv的csv文件:

日期、头衔、纬度、长度

下面,我尝试编写代码,以csv文件中所需的格式每行调用多个令牌。我正在寻找最终结果,以显示csv文件中每一行的地图pin/标题。也不希望从资产加载csv。我想我很接近了,请有人纠正这个代码+添加我可能需要的任何导入。多谢各位


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.String;




public class MapActivity extends AppCompatActivity
        implements OnMapReadyCallback {
    GoogleMap map;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mapFragment.getMapAsync(this);
    }




    @Override
    public void onMapReady(GoogleMap googleMap) {
        File fileGet = new File("/storage/emulated/0/csvLogs/source.csv");
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileGet));
            String line;
            while ((line = br.readLine()) !=null) {
                String[] token = line.split(",");
                double lat = Double.parseDouble(token[2]);
                double lon = Double.parseDouble(token[3]);
                LatLng Lat = new LatLng(lat, lon);
                googleMap.addMarker(new MarkerOptions().position(Lat).title(token[1]));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(Lat));
            }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}



当前有0个错误,但在不崩溃的情况下无法打开“活动”

这是否编译?这句话让我困惑:

LatLng Lat = new LatLng(s2=token[2].getText().toString() + "," + s3=token[3].getText().toString());
令牌是一个字符串数组,所以简单地说,令牌[2]将为您提供一个字符串。String没有GETTeX()方法,据我所知,我不确定S2和S3变量的定义,也不知道为什么要在字符串表达式中间分配给它们。 假设LatLng有一个接受这样一个字符串的构造函数,那么只需要下面的代码就可以了

LatLng Lat = new LatLng(token[2] + "," + token[3]);
然而,你真的相信你的CSV文件是格式良好的,这是我永远不会相信的。至少,像这样排队

if (token.length >= 4) {
并用大括号括住接下来的三行,这样就不会试图处理文件中的空行


您可能还想使用CSV阅读器库,它可以使您的CSV读取更干净、更可靠。

这是最终的工作代码,今天早上已经完成,并且已经过测试

Zag对于格式错误的csv文件是正确的。确保正在清理和编码纯文本数据,因为纯文本数据中的逗号会干扰正确解析csv文件





 @Override
    public void onMapReady(GoogleMap googleMap) {
        File fileGet = new File("/storage/emulated/0/csvLogs/demo.csv");
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileGet));
            String line;
            while ((line = br.readLine()) !=null) {
                String[] token = line.split(",");
                double lat = Double.parseDouble(token[2]);
                double lon = Double.parseDouble(token[3]);
                LatLng Lat = new LatLng(lat, lon);
                googleMap.addMarker(new MarkerOptions().position(Lat).title(token[1]));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(Lat));
            }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    }

```