Android Местоположение не может быть введено для редактирования текстов - PullRequest
1 голос
/ 03 февраля 2012

Я написал программу для отображения моего текущего местоположения, адреса и т. Д. В телефоне Android.Используемый API - это Android 2.2.Ранее это работало нормально в телефоне МТС CDMA.У него был API Android 2.3.Он также отлично работает в эмуляторе.Сейчас.Я купил Sony Ericsson Xperia Minipro, и у него также есть Android 2.3.Но программа будет работать на нем.Но редактировать тексты ничего не покажу.Я использую редактировать тексты для отображения значений.Они не обновляются программой вообще.В чем может быть проблема?Та же программа отлично работает в эмуляторе и показывает местоположение!Пожалуйста помоги.Я могу вставить код ниже

public class TravelGuide extends Activity {
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES=1;
private static final long MINIMUM_TIME_BETWEEN_UPDATES=1000;
StringBuilder strReturnedAddress;
List<Address> addresses;
protected LocationManager locationManager;
static String videoId;
Double lat;
Double longd;
Address returnedAddress;

private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
       //Double latitude = location.getLatitude();
       //Double longitude = location.getLongitude();

    }

    @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

    }
  };
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES,
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,new MyLocationListener());
    showCurrentLocation();
}
public void showCurrentLocation()
{
    Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(location!=null)
    {
        TextView myLatitude = (TextView)findViewById(R.id.mylatitude);
        TextView myLongitude = (TextView)findViewById(R.id.mylongitude);
        TextView myAddress = (TextView)findViewById(R.id.myaddress);

        String message=String.format("currentLocation\n Longitude:%1$s \n Latitude:%2$s",location.getLongitude(),location.getLatitude());
        Toast.makeText(TravelGuide.this,message,Toast.LENGTH_LONG).show();
        myLatitude.setText("Latitude: " + String.valueOf(location.getLatitude()));
            myLongitude.setText("Longitude: " + String.valueOf(location.getLongitude()));
           Geocoder geocoder = new Geocoder(this, Locale.ENGLISH);
          try {
          List<Address> addresses = geocoder.getFromLocation(Double.valueOf(location.getLatitude()), 
                  Double.valueOf(location.getLongitude()), 1);

          if(addresses != null) {
           Address returnedAddress = addresses.get(0);
           StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
           for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
            strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
           }
        videoId = (returnedAddress.getAddressLine(1)).toString();
        //sendAddress(videoId);
           myAddress.setText(strReturnedAddress.toString());
          }
          else{
           myAddress.setText("No Address returned!");
          }
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          //test = "kovalam";
          myAddress.setText("Canont get Address!");


    }

}

}


        public class MyLocationListener implements LocationListener
        {
            //private final Context MyLocationListener = null;

            //double LATITUDE;
            //double LONGITUDE;
            TextView myLatitude;
            TextView myLongitude;
            TextView myAddress;
        public void onLocationChanged(Location location)
        {
            //Context context = null;
            myLatitude = (TextView)findViewById(R.id.mylatitude);
            myLongitude = (TextView)findViewById(R.id.mylongitude);
            myAddress = (TextView)findViewById(R.id.myaddress);
            //String message=String.format("new Location\n Longitude:%1$s \n Latitude:%2$s",
            //location.getLongitude(),location.getLatitude());
            //Toast.makeText(TouristGuideActivity.this,message,Toast.LENGTH_LONG).show();
            myLatitude.setText("Latitude: " + String.valueOf(location.getLatitude()));
            myLongitude.setText("Longitude: " + String.valueOf(location.getLongitude()));
           Geocoder geocoder = new Geocoder(TravelGuide.this, Locale.ENGLISH);
          try {
          List<Address> addresses = geocoder.getFromLocation(Double.valueOf(location.getLatitude()), 
                  Double.valueOf(location.getLongitude()), 1);

          if(addresses != null) {
           Address returnedAddress = addresses.get(0);
           StringBuilder strReturnedAddress = new StringBuilder("Address:\n");
           for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
            strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
           }
        videoId = (returnedAddress.getAddressLine(1)).toString();
        //sendAddress(videoId);
           //myAddress.setText(strReturnedAddress.toString());
        myAddress.setText("Hello");
          }
          else{
           myAddress.setText("No Address returned!");
          }
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          myAddress.setText("Canont get Address!");

         }
        }




        public void onStatusChanged(String s, int i, Bundle b)
        {
            //Toast.makeText(TouristGuideActivity.this,"Provider status changed",Toast.LENGTH_LONG).show();
        }
        public void onProviderDisabled(String s)
        {
            Toast.makeText(TravelGuide.this,"Provider disabled by the user. GPS turned off",
                    Toast.LENGTH_LONG).show();
        }
        public void onProviderEnabled(String s)
        {
            Toast.makeText(TravelGuide.this,"Provider enabled by the user. GPS turned on",
                    Toast.LENGTH_LONG).show();

        }


     }

}

1 Ответ

0 голосов
/ 03 февраля 2012

вы получаете объект locaton null, попробуйте положить журнал в else условие ... и причина в том, что вы получаете последнее известное местоположение , которое вне доступно в этом телефоне, как ... так что если это правда ..

Перейти к этому ответу здесь реализовать этот код, чтобы получить текущее местоположение ... и он будет работать нормально.

Если вы используете GPS-провайдер для определения местоположения, выяснилось, что он не настолько точен, чтобы возвращать вам объект местоположения, лучше всего подходит Network Provider. По мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...