最初我的应用程序中的地图运行得很好,但几周之后我再次检查出来,然后我收到了这个错误。我尝试了一切,到处寻找解决方案,但问题没有得到解决。
错误
11-26 20:07:56.975: E/AndroidRuntime(3708): FATAL EXCEPTION: main
11-26 20:07:56.975: E/AndroidRuntime(3708): Process: com.ntec_app, PID: 3708
11-26 20:07:56.975: E/AndroidRuntime(3708): java.lang.NullPointerException
11-26 20:07:56.975: E/AndroidRuntime(3708): at com.ntec_app.Directionactivity.setUpMap(Directionactivity.java:109)
11-26 20:07:56.975: E/AndroidRuntime(3708): at com.ntec_app.Directionactivity.setUpMapifNeeded(Directionactivity.java:82)
11-26 20:07:56.975: E/AndroidRuntime(3708): at com.ntec_app.Directionactivity.onViewCreated(Directionactivity.java:64)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:956)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:450)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.os.Handler.handleCallback(Handler.java:733)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.os.Handler.dispatchMessage(Handler.java:95)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.os.Looper.loop(Looper.java:157)
11-26 20:07:56.975: E/AndroidRuntime(3708): at android.app.ActivityThread.main(ActivityThread.java:5506)
11-26 20:07:56.975: E/AndroidRuntime(3708): at java.lang.reflect.Method.invokeNative(Native Method)
11-26 20:07:56.975: E/AndroidRuntime(3708): at java.lang.reflect.Method.invoke(Method.java:515)
11-26 20:07:56.975: E/AndroidRuntime(3708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
11-26 20:07:56.975: E/AndroidRuntime(3708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
11-26 20:07:56.975: E/AndroidRuntime(3708): at dalvik.system.NativeStart.main(Native Method)
JAVA文件
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
/**
* A simple {@link Fragment} subclass.
*
*/
public class Directionactivity extends Fragment implements OnInfoWindowClickListener {
public static final String TAG = Directionactivity.class.getSimpleName();
GoogleMap googlemap;
MapView mv;
Marker auckland,hasting,tauranga,cht;
public Directionactivity() {
// Required empty public constructor
}
public static Directionactivity newInstance() {
// TODO Auto-generated method stub
return new Directionactivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v= inflater.inflate(R.layout.activity_direction, container, false);
//setUpMapifNeeded();
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
setUpMapifNeeded();
com.ntec_app.Directionactivity.onViewCreated(Directionactivity.java:64)
}
private void setUpMapifNeeded() {
// TODO Auto-generated method stub
if(googlemap==null)
{
// try to get map from google services
//googlemap=((SupportMapFragment).getSupportFragmentManager).findFragmentById(R.id.map)).getMap();
googlemap = ((SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
//GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(boolean);
}
if(googlemap!=null)
{
// create map manually
setUpMap();
com.ntec_app.Directionactivity.setUpMapifNeeded(Directionactivity.java:82)
}
}
private void setUpMap() {
// TODO Auto-generated method stub
// enable my location
googlemap.setMyLocationEnabled(true);
googlemap.setBuildingsEnabled(true);
// get location manager object from system services LOCATION_MANAGER
LocationManager locationmanager=(LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
//create a criterie object to retirive provider
Criteria criteria=new Criteria();
String provider=locationmanager.getBestProvider(criteria, true);
Location mylocation=locationmanager.getLastKnownLocation(provider);
//googlemap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
googlemap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
double latitude=mylocation.getLatitude();
double longitude=mylocation.getLongitude();
LatLng latlng=new LatLng(latitude, longitude);
LatLng ack=new LatLng(-36.845432,174.763113);
LatLng htg=new LatLng(-39.641638,176.850449);
LatLng tag=new LatLng(-37.686336,176.167189);
LatLng christ=new LatLng(-43.535969,172.541321);
googlemap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
googlemap.moveCamera(CameraUpdateFactory.zoomTo(14));
googlemap.getUiSettings().setZoomControlsEnabled(true);
googlemap.getUiSettings().setScrollGesturesEnabled(true);
googlemap.getUiSettings().setIndoorLevelPickerEnabled(true);
googlemap.getUiSettings().setTiltGesturesEnabled(true);
// to rotate the map
googlemap.getUiSettings().setAllGesturesEnabled(true);
// marker for my current locations
googlemap.addMarker(new MarkerOptions().position(latlng).title("You are here").snippet(latlng.toString()).draggable(false));
// setting Ntec hobson street marker
auckland=googlemap.addMarker(new MarkerOptions().position(ack).title("HEAD OFFICE AND AUCKLAND CAMPUS").snippet("Ntec Tower:20 Hobson Street P.O.Box 911-312 Auckland").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
hasting=googlemap.addMarker(new MarkerOptions().position(htg).title("HASTINGS CAMPUS").snippet("304-308 Ellison Road,P.O. Box 4122 Hastings").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
tauranga=googlemap.addMarker(new MarkerOptions().position(tag).title("TAURANGA CAMPUS").snippet("Durham Court,146 Durham St,Tauranga 3110").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
cht=googlemap.addMarker(new MarkerOptions().position(christ).title("CHRISTCHURCH CAMPUS").snippet("3/60 Waterloo Road,Hornby,Christchurch 8042").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
// TODO Auto-generated method stub
if(arg0.getTitle().equals("HEAD OFFICE AND AUCKLAND CAMPUS")) // if marker source is clicked
{
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?&daddr=%f,%f (%s)",-36.845432,174.763113, "HEAD OFFICE AND AUCKLAND CAMPUS");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
}}
}
if(arg0.getTitle().equals("HASTINGS CAMPUS"))
{
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?&daddr=%f,%f (%s)",-39.641638,176.850449, "HASTINGS CAMPUS");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
}}
}
if(arg0.getTitle().equals("TAURANGA CAMPUS"))
{
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?&daddr=%f,%f (%s)",-37.686336,176.167189, "TAURANGA CAMPUS");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
}}
}
if(arg0.getTitle().equals("CHRISTCHURCH CAMPUS"))
{
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?&daddr=%f,%f (%s)",-43.535969,172.541321, "CHRISTCHURCH CAMPUS");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
}}
}
}
});
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(latlng) // Sets the center of the map to Mountain View
.bearing(90) // Sets the orientation of the camera to east
.tilt(15) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
googlemap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
@Override
public void onInfoWindowClick(Marker arg0) {
}
}
XML文件
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
答案 0 :(得分:0)
getLastKnownLocation
如果没有好的最后位置,则可以返回null。在使用之前,您应该检查以确保mylocation
不为空。
Location mylocation=locationmanager.getLastKnownLocation(provider);
if(mylocation != null) {
// other code related using mylocation...
}