2012-02-02 10 views
1

У меня есть приложение, которое отображает GPS-координаты в виде тоста, но я пытаюсь сохранить эти координаты и отображать их в следующем действии , Проблема в том, что я не могу! Я работаю над этим последние 4 дня и не понимаю, как это сделать. Если у кого-то есть предложения, я бы очень признателен. Heres посмотреть код:Передача GPS-координат другой активности в Android

public class GPSActivity extends Activity{ 

double longitude = 0; 
double latitude  = 0; 

String s1 = "latitude"; 
String s2 = "longitude"; 

public Intent intent; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

intent = new Intent(this, Display.class); 

/* Use the LocationManager class to obtain GPS locations */ 
LocationManager myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
LocationListener myLocationListener = new MyLocationListener(); 

myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocationListener);} // end activity 


/* Class My Location Listener */ 
public class MyLocationListener implements LocationListener { 


@Override 
public void onLocationChanged(Location loc) { 

     longitude = loc.getLatitude(); 
     latitude = loc.getLongitude(); 

     String text = "My current location is: " + "Latitud = " + loc.getLatitude() + "Longitud = " + loc.getLongitude(); 



     Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); 

     Bundle extras = new Bundle(); 

     extras.putDouble("long", longitude); 
     extras.putDouble("lat", latitude); 

     intent.putExtras(extras); 

     startActivity(intent); } 

@Override 
public void onProviderDisabled(String provider){ 

Toast.makeText(getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT).show(); 
} 


@Override 
public void onProviderEnabled(String provider) { 

Toast.makeText(getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show(); 
} 


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

}} // End GPS activity 
+0

Вы получаете сообщение об ошибке? если да, вставьте журнал. как вы читаете значения lat & lon в другой активности? – Varun

+0

Что значит «Я не могу»? Что не удается? Или как? –

+0

Извините, для разработки следующего действия NEVER вызывается, если я вызываю startActivity (намерение) в методе onLocationChanged. Если я попытаюсь вызвать намерение в Activity, я получаю исключение nullpointer. – BodhiByte

ответ

0

Я не буду хранить намерение в качестве переменной-члена. Создайте его там, где вы хотите его запустить.

Bundle extras = new Bundle(); 
extras.putDouble("long", longitude); 
extras.putDouble("lat", latitude); 

Intent newIntent = new Intent(GPSActivity.this, Display.class); 
newIntent.putExtras(extras); 
startActivity(newIntent); 

определяют также отображаемую активность в AndroidManifest.xml

<manifest . . . > 
    . . . 
    <application . . .> 
     <activity android:name=".Display" 
        . . . > 
      . . . 
     </activity> 
    </application> 
</manifest> 
+0

Я пробовал объявить свое намерение в методе, который я хотел бы запустить в двух случаях: в Activity и в классе onLocationChanged, с намерением в Activity перебрасывать исключение нулевого указателя. – BodhiByte

0

Может быть, вы должны сделать класс, как этот

String lon; //variable Lon to pass to another activity 
String lat; //variable Lat to pass to another activity 
public void ALoc(double lon, double lat){ 
    this.lon = String.valueOf(lon); 
    this.lat = String.valueOf(lat); 
} 

Тогда вы положили это на onLocationChanged() или что передайте последнюю координату в String Lon и Lat, которые объявляют выше.

Location lokasiku = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
//... 
//blabla code 
//... 
ALoc(lokasiku.getLongitude(), lokasiku.getLatitude()); 

И в кнопку, чтобы перейти к следующей операции, которые потребляют этот параметр, вы должны сделать это передать параметр на OnClick() или что с помощью намерения. Предположим, у вас есть GoButton на макете с id: button_Go.

GoButton = (Button) findViewById(R.id.button_Go); 
    GoButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(RecentActivity.this, NextActivity.class); 
      intent.putExtra("lon", lon); 
      intent.putExtra("lat", lat); 
      RecentActivity.this.startActivity(intent); 
     } 
    }); 

И теперь, на NextActivity, вы должны получить данные, которые мы проходим, как описано выше, выглядит следующим образом, поставить его на OnCreate().

String lon = getIntent().getExtras().getString("lon"); 
    String lat = getIntent().getExtras().getString("lat"); 

Надеюсь, это поможет, по крайней мере, это уже работает на меня. : D