2016-10-23 3 views
0

안녕하세요 위치에 대해 문제가있어 위도를 얻습니다. 내 데이터베이스에서 항상 0.0입니다.Android MapView getlongitude 및 getlatitude가 발리 요청시 0.0을 반환합니다.

그것은 가변 상기 lngs 및 라트 합격 발리를 사용하지만 값이 도착할 때 0.0

변수 라트와 lngs가 onLocationChanged() 함수 다음

업데이트 했어야 인 일부이다 내 코드

Private double lats; 
Private double lngs; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    View myinflate = inflater.inflate(R.layout.fragment_home, container, false); 
    final TextView usr = (TextView)myinflate.findViewById(R.id.user); 



    Bundle extras = getActivity().getIntent().getExtras(); 
    usrnme = extras.getString("user"); 


    requestQueue = Volley.newRequestQueue(getActivity()); 


    locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); 

    listener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      lats=location.getLatitude(); 
      lngs=location.getLongitude(); 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 


    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

      ActivityCompat.requestPermissions(getActivity(),PERMISSIONS_LOCATION,REQUEST_LOCATION); 

     } 

    } 
    else 
    { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); 
    } 





      StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

       } 

      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 


       } 
      }) { 

       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        Map<String, String> parameters = new HashMap<String, String>(); 
        parameters.put("usr", usrnme); 
        parameters.put("lat", Double.toString(lats)); 
        parameters.put("lng", Double.toString(lngs)); 

        return parameters; 
       } 
      }; 
      requestQueue.add(request); 

답변

1

나는 당신이 조금 더 일찍 서버에 박쥐와 강을 넘겨주고 있다고 생각한다. 대신 locationManager listener에서 onLocationChanged 메서드를 호출 한 후 바로 위치를 보내십시오.

Private double lats; 
Private double lngs; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    View myinflate = inflater.inflate(R.layout.fragment_home, container, false); 
    final TextView usr = (TextView)myinflate.findViewById(R.id.user); 



    Bundle extras = getActivity().getIntent().getExtras(); 
    usrnme = extras.getString("user"); 


    requestQueue = Volley.newRequestQueue(getActivity()); 


    locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE); 

    listener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      lats=location.getLatitude(); 
      lngs=location.getLongitude(); 

      StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

       } 

      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 


       } 
      }) { 

       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        Map<String, String> parameters = new HashMap<String, String>(); 
        parameters.put("usr", usrnme); 
        parameters.put("lat", Double.toString(lats)); 
        parameters.put("lng", Double.toString(lngs)); 

        return parameters; 
       } 
      }; 
      requestQueue.add(request); 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 
    }; 


    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

      ActivityCompat.requestPermissions(getActivity(),PERMISSIONS_LOCATION,REQUEST_LOCATION); 

     } 

    } 
    else 
    { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); 
    } 
+0

고마워요! 그것은 효과가있다! lats와 lngs가 이제 데이터베이스에 있습니다! 그러나 내가지도의 나의 표시에서 lats와 lngs 변수를 사용하려고 노력했을 때 그것은 아프리카에 나를 보낸다! 같은 lats 및 lngs 변수와 같지 않은 lol은 어떤 아이디어를 보냈습니까? – Duckbenok

+1

'onLocationChanged'에서 Log on lats 및 lngs 값을 입력 한 다음 www.maps.google.com에 값을 입력하여 실제로 어디로 연결되는지 확인할 수 있습니까? 여전히 아프리카로 연결된다면 서버에서 가져 오는 위치는 앱에서 제공 한 것입니다. – fluffyBatman

+0

이것은 lat와 lngs의 값을 로그 할 때 onLocationChanged 값이 올바르지 만 마커 영역의 값을 외부에 기록 할 때 lat와 lngs가 맨 위에 표시되기 때문에 값은 0.0과 0.0입니다. lat와 lngs 값은 바뀌어야하지만 0을 반환하는 이유는 무엇입니까? 정말 이상한 – Duckbenok