尝试在Google地图V2上放置标记时发生NullPointerException [英] NullPointerException When Trying to place Marker on Google Map V2

查看:361
本文介绍了尝试在Google地图V2上放置标记时发生NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试使用placeMarker方法在Google地图上放置标记时,我得到NullPointerException


$ b

  NullPointerException:尝试调用虚方法' android.content.res.Resources android.content.Context.getResources()'null对象引用`
I / DpmTcmClient:RegisterTcmMonitor from:org.apache.http.impl.conn.TcmIdleTimerMonitor
W / DynamiteModule:未找到com.google.android.gms.googlecertificates的本地模块描述符类。
I / DynamiteModule:考虑本地模块com.google.android.gms.googlecertificates:0和远程模块com.google.android.gms.googlecertificates:2
I / DynamiteModule:所选远程版本com。 google.android.gms.googlecertificates,版本> = 2
D / GoogleCertificates:com.google.android.gms.googlecertificates模块已加载
E / url:http://maps.googleapis.com /maps/api/geocode/json?latlng=35.7742618,51.3596331&sensor=true
E / Lat Long地址:
E / Googlemap:null
D / GoogleCertificatesImpl:Fetched 363 Google证书
I / b:发送API令牌请求。
E / b:服务器上的身份验证失败。
E / Google地图Android API:授权失败
确保已启用Google地图Android API v2。
确保存在以下Android密钥:

另外我还使用了getAsyncMap和OnMapReady()。在OnMapReady中,我调用Asynktask来获取用户位置,并调用onPostExecute placeMarker方法:

  public void placeMarker(LatLongDetails user_latlongobj2,
最终上下文contextPlace){


尝试{
if(googlemap == null){
intialiseMap();
animatecamera(user_latlongobj);
}
if(LoginDetails.Address.length()<1){
LoginDetails.Address =获取您的位置.....;
}
googlemap.clear();
marker = new MarkerOptions()。position(
new LatLng(user_latlongobj2.user_latitude,
user_latlongobj2.user_longitude))。title(
LoginDetails.Address);

System.out.println(这是地址+ LoginDetails.Address);

marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));


googlemap.addMarker(marker).showInfoWindow();
System.out.println(PLACING MARKER+ LoginDetails.Address);
if(marker == null || contextPlace == null){
Intent in = new Intent(this,ProfileActivity1.class);
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
}
else
fixmarker(marker,contextPlace);

} catch(Exception e){
fixmarker(marker,contextPlace);
Log.d(Profileactivity,+ e);
}

}

当我试图将getMap()更改为getAsyncMap()还请检查此链接并在 GitHub 上完成整个活动



我删除了try和catch以查找有关error的更多详细信息。这里是logcat:

 在此输入代码javaja.lang .NullPointerException:尝试在android.content.ContextWrapper.getResources(ContextWrapper.java:87)上的空对象引用
上调用虚方法'android.content.res.Resources android.content.Context.getResources()'
在android.view.ContextThemeWrapper.getResources(ContextT hemeWrapper.java:81)
at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:551)
at android.content.Context.getString(Context.java:413)
at com.example.cabbookinghome.ProfileActivity1.intialiseMap(ProfileActivity1.java:280)
at com.example.cabbookinghome.ProfileActivity1.placeMarker(ProfileActivity1.java:327)
at epbit.helper.ConversionTaskLatLonLoc .onPostExecute(ConversionTaskLatLonLoc.java:130)
在epbit.helper.ConversionTaskLatLonLoc.onPostExecute(ConversionTaskLatLonLoc.java:24)
在android.os.AsyncTask.finish(AsyncTask.java:651)
在android.os.AsyncTask.access $ 500(AsyncTask.java:180)
在android.os.AsyncTask $ InternalHandler.handleMessage( AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)


解决方案

经过3天的搜索和处理它在这里是最终working.the真正的问题是谷歌地图是空的,这意味着地图不加载。我用try和catch,但你应该不要只是捕捉和例外,什么都不做。
在记录异常之后,检查我找到的日志:

  com.google.android.gms.maps。 MapFragment.getMap()'的空对象引用

首先我试过这个链接 Google地图返回nullpointerexception Google地图Android V2

  googleMap =((SupportMapFragment)getChildFragmentManager()。findFragmentById(R.id.map))。getMap();然后getChildFragmentManager变成红色,表示getChildFragmentManager()不能被解析或不能被引用。使用getSupportFragmentManager()而不是使用getSupportFragmentManager()如此链接中所述
getChildFragmentManager()无法解析或者不能被引用)终于解决了问题并且map已经被加载了

$ $ $ $ $ $ $ googlemap =((SupportMapFragment)getSupportFragmentManager( ).findFragmentById(R.id.mapfragment))的GetMap();

请注意,如果您的类从 AppCompatActivity 那么你需要使用 getSupportFragmentManager()
,因为 getChildFragmentManager()是Fragment不可访问的方法从 AppCompatActivity


when I try to place Marker on google map with placeMarker method I get NullPointerException

NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference`
I/DpmTcmClient: RegisterTcmMonitor from: org.apache.http.impl.conn.TcmIdleTimerMonitor
W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found.
I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:2
I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 2
D/GoogleCertificates: com.google.android.gms.googlecertificates module is loaded
E/url: http://maps.googleapis.com/maps/api/geocode/json?latlng=35.7742618,51.3596331&sensor=true
E/Lat Long to Addresss:
E/Googlemap: null
D/GoogleCertificatesImpl: Fetched 363 Google certificates
I/b: Sending API token request.
E/b: Authentication failed on the server.
E/Google Maps Android API: Authorization failure
Ensure that the "Google Maps Android API v2" is enabled.
                                                                                 Ensure that the following Android Key exists:

Also I used getAsyncMap and OnMapReady().Inside OnMapReady I invoke an Asynktask to get user location and onPostExecute placeMarker Method is invoked:

public void placeMarker(LatLongDetails user_latlongobj2,
final Context contextPlace) {


try {
if (googlemap == null) {
    intialiseMap();
    animatecamera(user_latlongobj);
}
if (LoginDetails.Address.length() < 1) {
    LoginDetails.Address = "Getting your location .....";
}
googlemap.clear();
marker = new MarkerOptions().position(
        new LatLng(user_latlongobj2.user_latitude,
                user_latlongobj2.user_longitude)).title(
        LoginDetails.Address);

System.out.println("This is the Address" + LoginDetails.Address);

marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));


googlemap.addMarker(marker).showInfoWindow();
System.out.println("PLACING MARKER" + LoginDetails.Address);
if (marker == null || contextPlace == null) {
    Intent in =new Intent(this,ProfileActivity1.class);
    in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(in);
}
else
fixmarker(marker, contextPlace);

} catch (Exception e) {
fixmarker(marker, contextPlace);
Log.d("Profileactivity", "" + e);
  } 

}

All these problem came along when I tried to change getMap() to getAsyncMap() Also pls check This link And the complete Whole Activity on GitHub

I removed try and catch to find more details about error.here is logcat:

enter code herejava.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                            at android.content.ContextWrapper.getResources(ContextWrapper.java:87)
                                                                            at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81)
                                                                            at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:551)
                                                                            at android.content.Context.getString(Context.java:413)
                                                                            at com.example.cabbookinghome.ProfileActivity1.intialiseMap(ProfileActivity1.java:280)
                                                                            at com.example.cabbookinghome.ProfileActivity1.placeMarker(ProfileActivity1.java:327)
                                                                            at epbit.helper.ConversionTaskLatLonLoc.onPostExecute(ConversionTaskLatLonLoc.java:130)
                                                                            at epbit.helper.ConversionTaskLatLonLoc.onPostExecute(ConversionTaskLatLonLoc.java:24)
                                                                            at android.os.AsyncTask.finish(AsyncTask.java:651)
                                                                            at android.os.AsyncTask.access$500(AsyncTask.java:180)
                                                                            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)

解决方案

After 3 Days Searching and Working on it here is what finally worked.the real problem is googlemap is null which means map is not loaded.I used try and catch but You should never just catch and exception and do nothing. after Log the exceptions, check the logs I found this:

com.google.android.gms.maps.MapFragment.getMap()' on a null object reference

First I tried This link Google Map returning nullpointerexception Google Maps Android V2

googleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();

Then getChildFragmentManager become red indicating getChildFragmentManager () cannot be resolved or cannot be referenced.using getSupportFragmentManager() instead as described in this link (getChildFragmentManager () cannot be resolved or cannot be referenced) finally solved the problem and map has been loaded

googlemap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment)).getMap();

Note that if your class extends from AppCompatActivitythen You need to use getSupportFragmentManager() because getChildFragmentManager() is a method of a Fragment not accessible fromAppCompatActivity

这篇关于尝试在Google地图V2上放置标记时发生NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆