我创建应用程序以获得坐标的用户位置,如纬度和经度,所以我使用play-service-location,我的程序代码如下:
import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private Location mLastLocation;
private Button btLocation;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupGoogleAPI();
// initialize button
btLocation = (Button) findViewById(R.id.bt_getLocation);
btLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mLastLocation != null) {
Toast.makeText(MainActivity.this," Get Location \n " +
"Latitude : "+ mLastLocation.getLatitude()+
"\nLongitude : "+mLastLocation.getLongitude(), Toast.LENGTH_LONG).show();
}
}
});
}
private void setupGoogleAPI(){
// initialize Google API Client
mGoogleApiClient = new GoogleApiClient
.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
@Override
protected void onStart() {
super.onStart();
// connect ke Google API Client ketika start
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
// disconnect ke Google API Client ketika activity stopped
mGoogleApiClient.disconnect();
}
@Override
public void onConnected(Bundle bundle) {
// get last location ketika berhasil connect
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
Toast.makeText(this," Connected to Google Location API", Toast.LENGTH_LONG).show();
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
如上所示,我用toast来显示坐标,问题是当我试验添加setText来显示坐标时,出现错误
错误:没有为setText(double)方法找到合适的方法TextView.setText(CharSequence)不适用(参数不匹配; double无法转换为CharSequence)方法TextView.setText(int)不适用(参数不匹配;可能有损转换)从double到int
我试了几天,结果总是出错,我怎么在setText中显示坐标,所以在textView中可以看到坐标?
2 回答
Toast的问题在于它使用双精度而不是字符串,因此无法设置
作为你的textview . 尝试将
mLastLocation.getLatitude()
和mLastLocation.getLongitude()
转换为字符串,然后再将其设置为textView . 检查这个答案(here)这个问题只是将
double
值转换为预期类型的问题 -String
会做得很好 . Java为此提供了几种方法:甚至简单快速和肮脏(经常皱眉!):
现在只需使用
setText()
就像这样:“X”,您选择的变体 .
General Comment on Conversion:
如果您要转换的值是(由于某种原因)
null
,那么String.valueOf()
将返回null
,但Double.toString()
将抛出NullPointerException
.