2016-10-23 7 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リスナーから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は今データベースに入っています!しかし、私はラットとlngsの変数をマップのマーカーに使用しようとしたとき、私をアフリカに送りました!笑それは同じラットとlngs変数に送信されたと等しいではない..任意のアイデア? – Duckbenok

+1

「onLocationChanged」から、Log on latsとlngsの値を入力してから、www.maps.google.comに値を入れて実際にどこに通じるのか確認できますか?まだアフリカにつながっている場合、サーバーから取得している場所は本当にあなたのアプリケーションによって与えられます。 – fluffyBatman

+0

これは奇妙なものですが、onLocationChangedの値をログに記録すると、値が正しくなりますが、マーカ領域の外に値を記録すると、値は0.0と0.0ですが、latとlngsは非常に上に宣言されていますlatとlngsの値は正しく変更されているはずですが、なぜ0を返すのでしょうか?本当に奇妙な – Duckbenok

関連する問題