getLastLocation().addOnSuccessListener 在按钮中不起作用
Posted
技术标签:
【中文标题】getLastLocation().addOnSuccessListener 在按钮中不起作用【英文标题】:getLastLocation().addOnSuccessListener not work in the button 【发布时间】:2018-09-23 11:07:19 【问题描述】:我想设置一个按钮,当我放上按钮,然后获取位置。
FusedLocationProviderClient userLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
这可以在onCreate中工作,但是我想设置一个按钮,当我放置按钮时, 然后告诉我用户位置。它行不通。有我的代码,我该如何解决?
public class MainActivity extends AppCompatActivity
final private int userAgreePermissionCode = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check permission and go "onRequestPermissionsResult"
int currentPermission = ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS_FINE_LOCATION);
if( currentPermission!=PackageManager.PERMISSION_GRANTED ) ActivityCompat.requestPermissions(this, new String[]android.Manifest.permission.ACCESS_FINE_LOCATION, userAgreePermissionCode);
findViewById(R.id.Locate).setOnClickListener(new View.OnClickListener()
@SuppressLint("MissingPermission")
@Override
public void onClick(View v)
// can't work
FusedLocationProviderClient userLocationProviderClient = LocationServices.getFusedLocationProviderClient(this); // Error in here!!
userLocationProviderClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>()
@Override
public void onSuccess(Location location)
Log.i("Longitude:", location.getLongitude()+"");
Log.i("Latitude:", location.getLatitude()+"");
);
);
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
switch (requestCode)
case userAgreePermissionCode:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
// Permission Granted
Log.i("Status:","Granted");
else
// Permission Denied
finish();
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
【问题讨论】:
Access "this" from Java anonymous class的可能重复 【参考方案1】:它不起作用,因为该范围内的this
指的是View.OnClientListener
的一个实例。
您可以改用MainActivity.this
来修复它,或者您可以将FusedLocationProviderClient
作为成员字段,在onCreate
中实例化它,然后在您的点击侦听器中使用它。
【讨论】:
【参考方案2】:只改变这个东西..
FusedLocationProviderClient userLocationProviderClient = LocationServices.getFusedLocationProviderClient(Location.this); // hear give your activity name
【讨论】:
以上是关于getLastLocation().addOnSuccessListener 在按钮中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
GoogleApiClient 中的 getLastLocation() 始终为空
getLastLocation().addOnSuccessListener 在按钮中不起作用
带有 .getLastLocation() FusedLocationProviderClient 的位置数据为空
来自 LocationClient 的 getLastLocation() 始终返回 null [重复]
如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?