java - Android - 无法获取纬度/经度值来存储和传递变量

标签 java android google-maps google-maps-markers google-maps-android-api-2

我试图将纬度/经度存储到变量 x3 和 x4 以传递 Spot[] 数组,但它返回 0。我尝试在 onConnected 方法上打印它,它工作正常。

我还尝试了其他方法在谷歌地图上添加标记,并将map.addMarker放在onConnected方法上,但我的应用程序关闭了。如果您可以建议在哪里放置 addMarker,请这样做。谢谢。

    GoogleMap map;


    private static Location mLastLocation;
    private static GoogleApiClient mGoogleApiClient;

    static double x3;
    static double x4;
    LatLng userloc;



@Override
public void onConnected(Bundle connectionHint) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {
        x3 = mLastLocation.getLatitude();
        x4 = mLastLocation.getLongitude();
        userloc = new LatLng(x3,x4);

        txtPlateno.setText(String.valueOf(x3+" - "+x4)); // PRINT TEST ONLY WITH CORRECT RESULT

    }
}






private static Spot[] SPOTS_ARRAY = new Spot[]{

    new Spot("YOU ARE HERE", "DESC ", "", new LatLng(x3, x4)), // NOT SHOWN IN MAP AT ALL

            new Spot("Besabella Parking Lot",
                    "Address: Sta Cruz Labogon, Mandaue City\n " +
                            "Fee: \n " +
                            "No. of available space: \n " +
                            "Distance:" + x3 + "KM", "", new LatLng(10.351763, 123.953683)),
            // TESTING x3 ON DISTANCE WITH RESULT 0.0

};

最佳答案

您可以在获取纬度/经度后调用添加标记,也可以在其上移动相机以供引用,您可以检查以下代码

 public class MapDialogFragment extends DialogFragment implements LibListner, OnClickListener, OnInfoWindowClickListener {

private View dialog;
private MarkerOptions markerOptions;
private SupportMapFragment mMapFragment;
private GoogleMap mMap;
private TextView tvBackText, tvback;
// private ArrayList<String> getClickedTitle;
private ArrayList<Data> newData;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Utility.Log("onCreateView");
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    // //
    getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    // getDialog().getWindow()
    // .getAttributes().windowAnimations = R.style.DialogAnimation;
    if (dialog != null) {
        ViewGroup parent = (ViewGroup) dialog.getParent();
        if (parent != null)
            parent.removeView(dialog);
    }
    try {
        dialog = inflater.inflate(R.layout.dlg_map, container, false);
    } catch (Exception e) {
        /* map is already there, just return view as it is */

    }

    return dialog;
}

@Override
public void onStart() {
    super.onStart();
    // Utility.Log("onStart");
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Utility.Log("onCreate");
    FragmentManager fm = getChildFragmentManager();
    mMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.mapView);
    if (mMapFragment == null) {
        mMapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.mapView, mMapFragment).commit();
    }
}

@Override
public void onActivityCreated(Bundle arg0) {
    super.onActivityCreated(arg0);

    init();
    loadMap();
    initMap();
    listner();

}

private void loadMap() {
    String map = Utility.BASE_URL + "mall/location";
    new GetLibResponse(MapDialogFragment.this, new LocationGeneralModel(), getActivity(), map, Utility.LOCATIONCOMMON, true, true);

}

@Override
public void onResume() {
    super.onResume();
    try {
        int chkGooglePlayServices = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
        markerOptions = new MarkerOptions();
        if (chkGooglePlayServices != ConnectionResult.SUCCESS) {
            GooglePlayServicesUtil.getErrorDialog(chkGooglePlayServices, getActivity(), 1122).show();
        } else {
            mMap = mMapFragment.getMap();
            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        }

        mMap.setMyLocationEnabled(false);
        mMap.setOnInfoWindowClickListener(this);
        // if (isSearch) {
        // mMap.setOnMapClickListener(MapDialogFragment.this);
        // mMap.setOnMapLongClickListener(MapDialogFragment.this);
        // mMap.setOnMarkerDragListener(MapDialogFragment.this);
        //
        // if (latitude != null && longitude != null && latitude != "" && longitude != "") {
        // mMap.clear();
        // markerOptions
        // .position(
        // new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude)));
        // mMap.addMarker(markerOptions);
        // mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
        // new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude)),
        // 15.0f));
        //
        // }
        // } else {
        // mMap.clear();
        // markerOptions
        // .position(
        // new LatLng(Double.parseDouble(flat), Double.parseDouble(flong)));
        // mMap.addMarker(markerOptions);
        // mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
        // new LatLng(Double.parseDouble(flat), Double.parseDouble(flong)),
        // 15.0f));
        // }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void init() {
    tvback = (TextView) dialog.findViewById(R.id.frg_location_tvBack);
    tvback.setOnClickListener(this);
    tvBackText = (TextView) dialog.findViewById(R.id.frg_location_tvBackText);
    tvBackText.setOnClickListener(this);
}

private void listner() {

}

private void initMap() {

}

private MainFragmentActivity mainActivity() {
    return ((MainFragmentActivity) getActivity());
}

@Override
public void onResponseComplete(Object clsGson, int requestCode) {
    if (requestCode == Utility.LOCATIONCOMMON) {
        if (mainActivity() != null) {
            mainActivity().mLocationGeneralModel = (LocationGeneralModel) clsGson;
            if ((mainActivity().mLocationGeneralModel != null) && (mainActivity().mLocationGeneralModel.data != null)
                    && (mainActivity().mLocationGeneralModel.data.size() != 0)) {
                ArrayList<Double> vLat = new ArrayList<Double>();
                ArrayList<Double> vLong = new ArrayList<Double>();
                ArrayList<String> vName = new ArrayList<String>();
                ArrayList<Data> newData = new ArrayList<LocationGeneralModel.Data>();
                for (int pin = 0; pin < mainActivity().mLocationGeneralModel.data.size(); pin++) {
                    try {
                        if (!mainActivity().mLocationGeneralModel.data.get(pin).vLat.equals("")) {

                            // Log.d("TAG", mainActivity().mLocationGeneralModel.data.get(pin).vLat);
                            vLat.add(Double.parseDouble(mainActivity().mLocationGeneralModel.data.get(pin).vLat));
                            vLong.add(Double.parseDouble(mainActivity().mLocationGeneralModel.data.get(pin).vLong));
                            vName.add((mainActivity().mLocationGeneralModel.data.get(pin).vName_en));
                            double vLatitude[] = new double[vLat.size()];
                            double vLongitude[] = new double[vLong.size()];
                            for (int getArray = 0; getArray < vLat.size(); getArray++) {
                                vLatitude[getArray] = vLat.get(getArray);
                                vLongitude[getArray] = vLong.get(getArray);
                                newData.add(mainActivity().mLocationGeneralModel.data.get(pin));
                            }
                            multipleMarker(vLatitude, vLongitude, vName, newData);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }

            }

        }
    }
}

@Override
public void onResponseError(String errorMessage, int requestCode) {

}

private void multipleMarker(double latitude[], double longitude[], ArrayList<String> vName, ArrayList<Data> newData) {

    this.newData = newData;
    mMap.clear();

    // LatLngBounds.Builder builder = new LatLngBounds.Builder();
    // for (Marker marker : markers) {
    // builder.include(marker.getPosition());
    // }
    // LatLngBounds bounds = builder.build();

    // getClickedTitle = new ArrayList<String>();
    for (int i = 0; i < latitude.length; i++) {
        // Log.d("TAG", "Marker Add" + latitude[i] + " " + longitude[i]);
        MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude[i], longitude[i])).title(vName.get(i));
        mMap.addMarker(marker);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude[i], longitude[i]), 5));
    }
    // getClickedTitle = vName;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.frg_location_tvBack:
        dismiss();
        break;
    case R.id.frg_location_tvBackText:
        dismiss();
        break;
    }
}

@Override
public void onInfoWindowClick(Marker arg0) {

    for (int counter = 0; counter < newData.size(); counter++) {

        if (arg0.getTitle().equals(newData.get(counter).vName_en)) {

            Data data = newData.get(counter);

            MallPerticularsFragment mFragment = new MallPerticularsFragment();
            Bundle bundle = new Bundle();
            bundle.putString("mall_name", data.vName_en);
            bundle.putString("mall_locEn", data.vLocation);

            mFragment.setArguments(bundle);
            ((MainFragmentActivity) getActivity()).displayFragmentWithArg(mFragment);
        }

    }
}
}

关于java - Android - 无法获取纬度/经度值来存储和传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770519/

相关文章:

java - 发生 Java UUID.randomUUID 冲突的机会有多大?

java - 如何转换代码以使用CompletableFuture?

android - Eclipse - ButtonCLick --> 带有文本的新屏幕?

java - 如何在 Google map 上存储和检索地点

javascript - 如何使用 google maps api V3 显示建筑物的室内平面图

android - 无法解析方法 "getMapAsync"

java - 打印首选项节点的子节点

java - Spring @ResponseBody 无法使用 session

android - 使用移动手势绘制矩形

android - 在 Android 中使用大尺寸可绘制对象和自定义 View