社区! 我正在制作一个演示来使用 Google API 显示经度和纬度。 它工作正常,直到我将项目复制到另一个目录。现在地图不会渲染,而是显示一个底部带有谷歌徽标的空白页面。
知道我做错了什么吗?这可能与 API 密钥有关吗? 提前致谢!
代码如下: 主要和唯一活动:MainActivity
docker exec container-id rails db:setup
2º 片段:MapFragment
public class MainActivity extends AppCompatActivity {
Fragment currentFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentFragment = new WelcomeFragment();
changeFragmentTo(currentFragment);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menu_welcome:
currentFragment= new WelcomeFragment();
break;
case R.id.menu_map:
currentFragment= new MapFragment();
break;
}
changeFragmentTo(currentFragment);
return super.onOptionsItemSelected(item);
}
private void changeFragmentTo(Fragment fragment){
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment).commit();
}
}
片段映射:
public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMarkerDragListener{
private View rootView;
private GoogleMap gMap;
private MapView mapView;
private Geocoder geocoder;
private List<Address> addresses; //object
public MapFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_map, container, false);
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mapView = (MapView) rootView.findViewById(R.id.map);
if (mapView !=null){
mapView.onCreate(null);
mapView.onResume();
mapView.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
gMap = googleMap;
LatLng pinto = new LatLng(40.24717072159241, -3.6988735198974614);
CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
gMap.addMarker(new MarkerOptions().position(pinto).title("Marker in Pinto").draggable(true));
gMap.moveCamera(CameraUpdateFactory.newLatLng(pinto));
gMap.animateCamera(zoom);
//get information of addresses when we drag the marker
gMap.setOnMarkerDragListener(this);
geocoder = new Geocoder(getContext(), Locale.getDefault()); //object that gets the location
}
@Override
public void onMarkerDragStart(Marker marker) {
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
double latitude = marker.getPosition().latitude;
double longitude = marker.getPosition().longitude;
try {
addresses= geocoder.getFromLocation(latitude,longitude,1); //limit 5
} catch (IOException e) {
e.printStackTrace();
}
String address = addresses.get(0).getAddressLine(0);
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country= addresses.get(0).getCountryName();
String postalCode= addresses.get(0).getPostalCode();
Toast.makeText(getContext(), "Address:" + address + '\n'+
"City:" + city + '\n' +
"State:" + state + '\n'+
"Country:" + country + '\n'+
"Postal Code:" + postalCode + '\n'
, Toast.LENGTH_LONG).show();
}
}