android studio阅读xls文件无法正常工作

时间:2015-08-15 18:05:26

标签: android xls

我正试图从.xls文件中获取一些数据,但它无法正常工作。文件的第2列是地点的纬度和经度,第3列是一个问题。我想保存纬度和经度,计算距离我当前位置的距离,当我足够接近(dist <0.02)时,显示问题。不幸的是我找不到错误。有人可以帮我吗?非常感谢!

    public class GeoCurrentProximityDistance extends FragmentActivity  {

GoogleMap googleMap;
LocationManager locationManager;
PendingIntent pendingIntent;
SharedPreferences sharedPreferences;
Toast toast;
MediaPlayer mysound;
int zoomlevel;
Polyline line;
boolean tag = false;
double destLatit;
double destLongit;
double latitude;
double longitude;
String unit;

@Override
public void onCreate(Bundle savedInstanceState)  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.geomain_proximityalert);


    // Getting Google Play availability status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());


    // Showing status
    if (status != ConnectionResult.SUCCESS) { // Google Play Services are not available

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();

    } else { // Google Play Services are available

        // Getting reference to the SupportMapFragment of activity_main.xml

        // Getting GoogleMap object from the fragment
        googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();


        // Enabling MyLocation Layer of Google Map
        googleMap.setMyLocationEnabled(true);

        // Getting LocationManager object from System Service LOCATION_SERVICE
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // Creating a criteria object to retrieve provider
        Criteria criteria = new Criteria();

        // Getting the name of the best provider
        String provider = locationManager.getBestProvider(criteria, true);

        // Getting Current Location
        Location location;
        location = locationManager.getLastKnownLocation(provider);


        try {
            read(location,latitude, longitude, unit, destLatit, destLongit, tag);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


public void CalculateDistance(double latitude, double longitude, double destLatit, double destLongit, String unit, boolean tag) {
    tag = false;
    TextView tvDistance = (TextView) findViewById(R.id.tv_distance);
    double theta = longitude - destLongit;
    double dist = Math.sin(deg2rad(latitude)) * Math.sin(deg2rad(destLatit)) + Math.cos(deg2rad(latitude)) * Math.cos(deg2rad(destLatit)) * Math.cos(deg2rad(theta));
    dist = Math.acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;
    if (unit == "K") {
        dist = dist * 1.609344;
    } else if (unit == "M") {
        dist = dist * 0.8684;
    }
    tvDistance.setText("Distance:" + round(dist, 2) * 1000 + "meters");
//    while (tag == false) {
        if (dist > 10) {
            Toast.makeText(getBaseContext(), "Είστε αρκετά μακρυά. Η απόσταση από τον προορισμό σας είναι μεγαλύτερη από 10 χιλιόμετρα.", Toast.LENGTH_LONG).show();
            zoomlevel = 8;
            int secondsDelayed = 1;
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    finish();
                }
            }, secondsDelayed * 30000);
        }
        if (dist <= 10 && dist > 5) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 10 χιλιόμετρα.", Toast.LENGTH_LONG).show();
            zoomlevel = 12;
        }
        if (dist <= 5 && dist > 1) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 5 χιλιόμετρα.", Toast.LENGTH_LONG).show();
            zoomlevel = 13;
        }
        if (dist <= 1 && dist > 0.5) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 1 χιλιόμετρο.", Toast.LENGTH_LONG).show();
            zoomlevel = 14;
        }
        if (dist <= 0.5 && dist > 0.25) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 500 μέτρα", Toast.LENGTH_LONG).show();
            zoomlevel = 15;
        }
        if (dist <= 0.25 && dist > 0.1) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 250 μέτρα", Toast.LENGTH_LONG).show();
            zoomlevel = 15;
        }
        if (dist <= 0.1 && dist > 0.05) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 100 μέτρα. Ο στόχος πλέον πρέπει να είναι ορατός.", Toast.LENGTH_LONG).show();
            zoomlevel = 16;
        }
        if (dist <= 0.05 && dist > 0.03) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 50 μέτρα.", Toast.LENGTH_LONG).show();
            zoomlevel = 17;
        }
        if (dist <= 0.03 && dist > 0.02) {
            Toast.makeText(getBaseContext(), "Η απόσταση από τον προορισμό σας είναι μικρότερη από 30 μέτρα.", Toast.LENGTH_LONG).show();
            zoomlevel = 18;
        }
        if (dist <= 0.02) {
            Toast.makeText(getBaseContext(), "Συγχαρητήρια! Ο στόχος σας είναι πλέον ορατός.", Toast.LENGTH_LONG).show();
            zoomlevel = 18;
            tag = true;
        }
    }


public String inputFile;

public void setInputFile(String inputFile) {
    this.inputFile = "C:\\Users\\Βούλα\\Desktop\\coords.xls";
}


public void read(Location location, double latitude, double longitude, String unit, double destLatit, double destLongit, boolean tag) throws IOException {
    setInputFile(inputFile);
    File inputWorkbook = new File(inputFile);
    Workbook w;
    try {
        w = Workbook.getWorkbook(inputWorkbook);
        // Get the first sheet
        Sheet sheet = w.getSheet(0);
        // Loop over first 10 column and lines
        int QuestionNumber = 0;
        //διαβαζει το αρχειο πρωτα ανα γραμμή, όχι απ το 0 αλλά απ το 1, γιατι στην γραμμη 0 ειναι ο τιτλος
        for (int row = 1; row < sheet.getRows(); row++) {

            for (int clm = 0; clm < sheet.getColumns(); clm++) {

                if (clm == 0) {  //στην 1η στηλη, περιέχεται το latitude
                    Cell latit = sheet.getCell(row, clm);
                    Cell longit = sheet.getCell(row, clm + 1); //στην 2η, το longitude
                    String lattd = latit.getContents();
                    String longtd = longit.getContents();

                    destLatit = Double.parseDouble(lattd);
                    destLongit = Double.parseDouble(longtd);

                    this.CalculateDistance(latitude, longitude, destLatit, destLongit, unit, tag);
                    onLocationChanged(location);
                 //   if (tag == true) {

                        String qstn = sheet.getCell(row, 2).getContents();
                        Intent intent = new Intent(this, CurrentQuestion.class);
                        intent.putExtra("question", qstn);
                        startActivity(intent);

                  //  }
                    QuestionNumber = QuestionNumber + 1;
                }

            }

        }


    } catch (BiffException e) {
        e.printStackTrace();
    }
}

}

公共类CurrentQuestion扩展了Activity {

public static final String qstn = CurrentQuestion.class.getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // setContentView(R.layout.activity_display_message);

    Intent intent = getIntent();
    intent.getStringExtra("question");


    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(qstn);

    setContentView(textView);



}

0 个答案:

没有答案