-1

Я создаю приложение, которое будет иметь доступ и широту и долготу пользователя, чтобы отображать близлежащие рестораны.Доступ к 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()); 

} 

}

ответ

2

Это не изменилось, потому что он не имеет место еще. Просто потому, что вы подключаетесь к игре Google, это не означает, что местоположение будет готово. Вам необходимо прослушать обновления местоположения и установить значение в onLocationChanged.

+0

Hi Gabe! Я думаю, что у нас есть недоразумение, позвольте мне перефразировать вопрос. Im знает, что он не получит меня постоянными обновлениями местоположения, но текущий код получит мне одно, статическое, неизменное значение широты, которое я установил равным строке mLat. Когда я пытаюсь показать это значение на тосте, строка вообще не появится. Это не проблема обновлений местоположения, так что строка не будет хранить значение для широты вообще. Имеет ли это смысл? Было бы здорово, если бы я мог получить помощь по этому поводу :) – gkquantum17

+0

Телефон не всегда знает свое местоположение. Он не отслеживается в фоновом режиме, если никто не активно запрашивает обновления. Когда вы запрашиваете его для getLastLocation, эта функция вернет только хорошее значение, если какое-то приложение недавно получает обновления. Если нет, он не будет иметь и возвращает null. Это то, что вы видите здесь. –

+0

Но когда я устанавливаю текст textveiw равным широте внутри метода onConnected(), он отлично отображает широту. Но он не позволит мне получить доступ к строке, которую я установил равной широте за пределами метода onConnected(). Я спрашиваю, есть ли какой-либо способ доступа к широте как строки вне этой функции, например, по методу onCreate(), где у меня есть тост, чтобы равняться широте? – gkquantum17

 Смежные вопросы

  • Нет связанных вопросов^_^