我无法在Android中达到更改位置值

时间:2013-05-14 22:07:13

标签: android android-location

我很抱歉我的简单问题,但我是这个话题的新手。我有Android的位置类,我用Toast Message到达我的位置,但是我无法达到我的位置值其他类。例如;

我的位置等级

import android.app.AlertDialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocation{
    private LocationManager locationManager;
    LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }

    }

    public class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            Bundle bundle = new Bundle();

            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();

            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        public String getLat(){
            return lat.toString();
        }

        public String getLon(){
            return lon.toString();
        }

        private Double lat;
        private Double lon;
    }

我打电话给

MyLocation myLocation = new MyLocation(getActivity());
Runnable runnable = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while(bundle.getString("lon") != null){
                    tv1.setText("Lon : " + bundle.getString("lon"));
                    tv2.setText("Lat : " + bundle.getString("lat"));
                }

            }
        };

        new Thread(runnable).start();

但每次我的包返回null值。我能做什么 ?

2 个答案:

答案 0 :(得分:3)

因为您构建了一个新的Bundle,因此它可以检索您在活动中保存的数据。

您可以实施以下内容:

public class MyLocationListener implements LocationListener{

   Bundle bundle = new Bundle();

   public Bundle getBundle(){
        return bundle;
   }

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub

            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();

            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }
      //other method

}

public class MyLocation{
    private LocationManager locationManager;
    LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }

public Bundle getBundle(){
  if(locationListener != null)
      return locationListener.getBundle();
   else 
       return null;
}
    }

然后就这样做:

    Bundle bundle = myLocation.getBundle();
    if(bundle != null){
        tv1.setText("Lon : " + bundle.getString("lon"));
        tv2.setText("Lat : " + bundle.getString("lat"));
}

编辑:

更改private LocationListener locationListener;

private MyLocationListener locationListener;

答案 1 :(得分:1)

我的所有代码;

http://p1305.hizliresim.com/19/h/n2zwm.png

感谢您的帮助

package com.example.postproject;

import android.app.AlertDialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class MyLocation{
    private LocationManager locationManager;
    private LocationListener locationListener;
    private Context ourContext;

    public MyLocation(Context context){

        this.ourContext = context;

        locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();

        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if(!gps){
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 6000, 100, locationListener);
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("GPS Disabled");
            alertDialog.setMessage("You can enable GPS for settings");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();     
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 100, locationListener);
        }
    }

    public Bundle getBundle(){
        if(locationListener != null)
            return locationListener.getBundle();
        else
            return null;
    }

    public class MyLocationListener implements LocationListener{
        Bundle bundle = new Bundle();

        public Bundle getBundle(){
            return bundle;
        }

        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
            lat = location.getLatitude();
            lon = location.getLongitude();
            Toast.makeText(ourContext, lat +" ve "+ lon, Toast.LENGTH_LONG).show();
            bundle.putString("lat", lat.toString());
            bundle.putString("lon", lon.toString());
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        public String getLat(){
            return lat.toString();
        }

        public String getLon(){
            return lon.toString();
        }

        private Double lat;
        private Double lon;

    }


}

我用

MyLocation myLocation = new MyLocation(getActivity());

        Bundle bundle = myLocation.getBund();
        tv1.setText("Lon : " + bundle.getString("lon"));
        tv2.setText("Lat : " + bundle.getString("lat"));