Я создаю приложение, которое будет иметь доступ и широту и долготу пользователя, чтобы отображать близлежащие рестораны.Доступ к Google Google API широты и долготы
Я пытался извлечь переменные широты и долготы из метода onConnected (Bundle bunle), как показано ниже, для доступа к ним и использования их в методе onCreate(), но широта строки, которую я объявила в верхней части, не будет хранить значение широты, когда я установил его равным широте пользователей в методе onConnnected(). Я попытался проверить, каким будет результат, когда я отобразил строку в сообщении тоста, но тост был просто пустым, указав, что строка не была установлена равной значению широты. Однако, если я попытаюсь отобразить тост в рамках метода onConnected(), он будет работать. Но мне действительно нужно получить доступ к этой широте и долготе вне метода onConnected() в методе onCreate().
Я разместил код ниже! Любая помощь будет оценена!
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks, com.google.android.gms.location.LocationListener {
protected static final String TAG = "Gokul Log Message: ";
protected GoogleApiClient mGoogleApiClient;
protected Location mLastLocation;
protected TextView textLatitude;
public String mLat = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textLatitude = (TextView)this.findViewById(R.id.textLatitude);
Toast.makeText(MainActivity.this, mLat, Toast.LENGTH_LONG).show();
buildGoogleApiClient();
}
protected synchronized void buildGoogleApiClient(){
Log.v("Log1", "Entering buildGoogleApiClient method");
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
protected void onStart(){
Log.v("Log1", "Entering onStart() method");
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop(){
Log.v("Log1", "Entering onStop() method");
super.onStop();
if (mGoogleApiClient.isConnected()){
mGoogleApiClient.disconnect();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConnected(Bundle bundle) {
Log.v("Log1", "Entering onConnected() method");
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null){
textLatitude.setText(String.valueOf(mLastLocation.getLatitude()));
//textLongitude.setText(String.valueOf(mLastLocation.getLongitude()));
mLat = String.valueOf(mLastLocation.getLatitude());
Log.v("Log1onConnected", mLat + "asd");
}
Log.v("Log1onConnected2", mLat + "asd");
}
@Override
public void onConnectionSuspended(int i) {
Log.i(TAG, "Connection suspended");
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "Connection failed: " + connectionResult.getErrorCode());
}
}
Hi Gabe! Я думаю, что у нас есть недоразумение, позвольте мне перефразировать вопрос. Im знает, что он не получит меня постоянными обновлениями местоположения, но текущий код получит мне одно, статическое, неизменное значение широты, которое я установил равным строке mLat. Когда я пытаюсь показать это значение на тосте, строка вообще не появится. Это не проблема обновлений местоположения, так что строка не будет хранить значение для широты вообще. Имеет ли это смысл? Было бы здорово, если бы я мог получить помощь по этому поводу :) – gkquantum17
Телефон не всегда знает свое местоположение. Он не отслеживается в фоновом режиме, если никто не активно запрашивает обновления. Когда вы запрашиваете его для getLastLocation, эта функция вернет только хорошее значение, если какое-то приложение недавно получает обновления. Если нет, он не будет иметь и возвращает null. Это то, что вы видите здесь. –
Но когда я устанавливаю текст textveiw равным широте внутри метода onConnected(), он отлично отображает широту. Но он не позволит мне получить доступ к строке, которую я установил равной широте за пределами метода onConnected(). Я спрашиваю, есть ли какой-либо способ доступа к широте как строки вне этой функции, например, по методу onCreate(), где у меня есть тост, чтобы равняться широте? – gkquantum17