Как сохранить несколько координат местоположения в вашем проекте? - PullRequest
0 голосов
/ 17 февраля 2020

Я выбираю некоторые местоположения с сервера, и мне нужно указать их в качестве маркеров на карте Google, поэтому я создал модель местоположений и использовал библиотеку залпов для получения подробностей с сервера. и сохранить их в переменной и разместить его на карте. Но я получаю ошибку как java .lang.NumberFormatException: несколько точек . Так что нужна помощь. Это моя модель

public class LocationModel
private String pdLatitude;
private String pdLongitude;

public LocationModel(String pdLatitude, String pdLongitude){
this.pdLatitude = pdLatitude;
this.pdLongitude = pdLongitude; }

public String getPdLatitude() {
return pdLatitude;
}

public String getPdLongitude() {
return pdLongitude;
}

Это моя активность, где я получаю информацию с сервера

private void findRoute(){
        StringRequest request = new StringRequest(Request.Method.GET,
                Constant.Route_URL + "/" + driverschoolname + "/" + driverid,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        String pdlatitude = "";
                        String pdlongitude = "";
                        try{
                            JSONObject jsonObject = new JSONObject(response);
                            JSONArray array = jsonObject.getJSONArray("res");
                            for (int i=0; i<array.length(); i++){
                                JSONObject object = array.getJSONObject(i);
                                StudentsPickDropModel pickDropModel = new StudentsPickDropModel(
                                        object.getString("pdloc_latitude"),
                                        object.getString("pdloc_longitude")
                                );
                                pdlatitude += pickDropModel.getPdLatitude();
                                pdlongitude += pickDropModel.getPdLongitude();
                                Toast.makeText(StudentsPickDropActivity.this, pickDropModel.getPdName(), Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(Activity.this, GetRoute.class);
                                intent.putExtra("pd_latitude", pdlatitude);
                                intent.putExtra("pd_longitude", pdlongitude);
                                startActivity(intent);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(Activity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

        RequestQueue queue = Volley.newRequestQueue(this);
        queue.add(request);
    }

И так я публикую свои координаты в Google maps

Bundle bundle = getIntent().getExtras();
        schoollat = bundle.getString("school_lat");
        schoollng = bundle.getString("school_lng");
        pdlat = bundle.getString("pd_latitude");
        pdlng = bundle.getString("pd_longitude");

        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        mFusedLocationClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
            @Override
            public void onComplete(@NonNull Task<Location> task) {
                Location location = task.getResult();
                if (location == null){
                    requestNewLocationData();
                } else {
                    currentLat = location.getLatitude();
                    currentLng = location.getLongitude();
                    System.out.println("Current Latitude: "+location.getLatitude());
                    System.out.println("Current Longitude: "+location.getLongitude());
                }
            }
        });

        Double clat = currentLat;
        System.out.println("Current Latitude : "+clat);

        Double schoollatitude = new Double(schoollat);
        Double schoollongitude = new Double(schoollng);
        System.out.println("School latitude : "+schoollatitude + ", School Longitude : "+schoollongitude);
        Double pdlatitude = new Double(pdlat);
        Double pdlongitude = new Double(pdlng);

        getDirections = findViewById(R.id.getdirection);
        getDirections.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new FetchURL(GetRoute.this).execute(getUrl(placeOne.getPosition(), placeTwo.getPosition(), "driving"), "driving");
            }
        });

        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map_fragment);
        mapFragment.getMapAsync(this);

        places = new MarkerOptions().position(new LatLng(pdlatitude, pdlongitude)).title("Office");

А это мой JSON

  "res": [
        {
            "pdloc_latitude": "12.3111356",
            "pdloc_longitude": "76.6075989",
        },
        {
            "pdloc_latitude": "88.568645787",
            "pdloc_longitude": "75.54544454887",
        }

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Ваш PDlat имеет 2 балла. Это недопустимо для Double, поскольку Double имеет 1 балл.

Ваше значение:

12.311135688.568645787

То, что должно иметь 1 балл, выглядит следующим образом:

12.311135688568645787

PS. Вы можете перехватить исключение, если разбор значения не удался, и то, что нужно сделать, зависит от того, что произошло исключение.

0 голосов
/ 17 февраля 2020

Используйте Double.parseDouble() для повышения эффективности

Основной метод - parseDouble (), который специально разработан для анализа строки, содержащей значение с плавающей запятой, в объект Double. Остальные методы, например, valueOf () и конструктор, используют parseDouble () для внутреннего использования.

и убедитесь, что передаваемое вами значение pdlat является допустимым двойным числом, а не просто символами

Этот (Double.parseDouble()) метод выдаст NullPointerException , если передаваемая вами строка равна нулю, и NumberFormatException , если String не содержит действительного двойного значения, например, содержащего alphabeti c символов.

Просто отладьте Double pdlatitude = new Double(pdlat); строку, чтобы быть уверенным.

...