2017-01-23 2 views
2

Ich habe vor kurzem meine App auf SKMaps 3.0.2 aktualisiert, und alles schien zu funktionieren, vor allem, wenn meine Aktivität ("ViewLocationActivity"), ein Fragment, das Android erweitert .support.v4.app.Fragment ("NewMapFragment") wird neu gestartet, nachdem es zum Beispiel einige Zeit im Hintergrund war und die Methode onStart() aufgerufen wurde. Das Fragment kann den SKMapViewHolder nicht aufblasen und stürzt ab. Ich habe das Protokoll gebunden, aber es scheint, den Grund dafür ist die Linie, die besagt,SKMaps Android Trace-Fehler in Activity OnStart()

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.skobbler.ngx.map.SKMapViewStyle.getStyleFileName()' on a null object reference at com.skobbler.ngx.map.SKMapViewHolder.a(SourceFile:254) 

Diese nicht in der früheren SDK-Version nicht auftreten und ist besonders seltsam, da es nicht passieren, wenn zuerst das Fragment Laden, aber nur in nachfolgenden Neustarts, wenn onStart() aufgerufen wird.

Relevant Code-Schnipsel

@Override 
public void onStart() // In ViewLocationActivity { 
    super.onStart(); 
    Intent intent = new Intent(this, LocationService.class); 
    bindService(intent, mConnection, BIND_AUTO_CREATE); 
} 



public void onCreate(Bundle savedInstanceState) // in NewMapFragment { 
    super.onCreate(savedInstanceState); 
    Methods.initializeSKMaps(getActivity());   
    locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
    registerLocationListener(); 
    SKCurrentPositionProvider currentPositionProvider = new SKCurrentPositionProvider(getActivity()); 
    currentPositionProvider.setCurrentPositionListener(this); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) // in NewMapFragment { 
    // App crashes in this line 
    mView = inflater.inflate(R.layout.fragment_new_map, container, false); 
    mapHolder = (SKMapViewHolder)mView.findViewById(R.id.map_surface_holder); 
    mapHolder.setMapSurfaceListener(this); 
    initializeControlButtons(); 
    initializeBottomSheet(); 
    return mView; 
} 

    <!-- fragment_new_map --> 
<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/skobbler_map_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <com.skobbler.ngx.map.SKMapViewHolder 
     android:id="@+id/map_surface_holder" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
    <include layout="@layout/map_control_layout" 
     android:id="@+id/map_control_layout"/> 
</android.support.design.widget.CoordinatorLayout> 

Logcat:

01-23 20: 40: 19.453 bis 19.453 51,548/com.shay.vagabond E/Android Runtime: schwerwiegendes EXCEPTION: Hauptprozeß: com .shay.vagabond, PID: 19453 java.lang.RuntimeException: Aktivität kann nicht gestartet werden ComponentInfo {com.shay.vagabond/com.shay.vagabond.Activities.ViewLocationActivity}: android.view.InflateException: Binär-XML-Dateizeile # 7: Binär XML-Datei Zeile # 7: Fehler beim Aufblasen der Klasse com.skobbler.ngx.map.SKMapViewHolder bei android.app.ActivityThread.performLaunchActiv ity (ActivityThread.java:2646) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707) bei android.app.ActivityThread.-wrap12 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread. Java: 1460) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:6077) um java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:865) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 755) Verursacht von: android.view.InflateException: Binär-XML-Datei Zeile # 7: Binär-XML-Datei Zeile # 7: Fehler beim Aufblasen der Klasse com.skobbler.ngx.map.SKMapViewHolder Verursacht von: android.view.InflateException: Binär XML-Datei Zeile # 7: Fehler beim Aufblasen der Klasse com.skobbler.ngx.map.SKMapViewHolder Verursacht von: java.lang.reflect.InvocationTargetException bei java.lang.reflect.Constructor.newInstance0 (Native Methode) bei java.lang .reflect.Constructor.newInstance (Constructor.java:430) bei android.view.LayoutInflater.createView (LayoutInflater.java:645) bei android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:787) bei android.view.LayoutInflater. createViewFromTag (LayoutInflater.java:727) bei android.view.LayoutInflater.rInfllate (LayoutInflater.java:858) bei android.view.LayoutInflater.rInfllateChildren (LayoutInflater.java:821) bei android.view.LayoutInflater.inflate (LayoutInflater.java : 518) bei android.view.LayoutInflater.inflate (LayoutInflater.java:426) bei com.shay.vagabond.Fragments.NewMapFragment.onCreateView (NewMapFragment.java:155) bei android.support.v4.app.Fragment.performCreateView (Fragment.java:2087) bei android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1113) bei android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1295) bei android.support.v4 .app.FragmentManagerImpl.moveToState (FragmentManager.java:1277) unter android.support.v4.app.FragmentManagerImpl.dispat chActivityCreated (FragmentManager.java:2154) bei android.support.v4.app.FragmentController.dispatchActivityCreated (FragmentController.java:201) bei android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:603) bei android.support .v7.app.AppCompatActivity.onStart (AppCompatActivity.java:181) bei com.shay.vagabond.Activities.ViewLocationActivity.onStart (ViewLocationActivity.java:691) bei android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1248) bei android.app.Activity.performStart (Activity.java:6681) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2609) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707) at android.app.ActivityThread .-wrap12 (ActivityThread.java) unter android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper .java: 154) bei android.app.ActivityThread.main (ActivityThread.java:6077) bei Java.lang.reflect.Method.invoke (Native Methode) unter com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:865) unter com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755) Verursacht von: java.lang.NullPointerException: Versuch, die virtuelle Methode 'java.lang.String com.skobbler.ngx.map.SKMapViewStyle.getStyleFileName()' für eine Nullobjektverweisliste unter com.skobbler.ngx.map.SKMapViewHolder aufzurufen .a (SourceFile: 254) unter com.skobbler.ngx.map.SKMapViewHolder. (SourceFile: 159) unter java.lang.reflect.Constructor.newInstance0 (Native Method) unter java.lang.reflect.Constructor.newInstance (Constructor. Java: 430) bei android.view.LayoutInflater.createView (LayoutInflater.java:645) bei android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:787) bei android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:727) um android.view.LayoutInflater.rInfllate (LayoutInflater.java:858) bei android.view.LayoutInflater.rInfllateChildren (LayoutInflater.java:821) bei android.view.LayoutIn flatter.infllate (LayoutInflater.java:518) bei android.view.LayoutInflater.infllate (LayoutInflater.java:426) unter com.shay.vagabond.Fragments.NewMapFragment.onCreateView (NewMapFragment.java:155) unter android.support.v4 .app.Fragment.performCreateView (Fragment.java:2087) unter android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1113) unter android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1295) Unter android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1277) unter android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:2154) unter android.support.v4.app.FragmentController. dispatchActivityCreated (FragmentController.java:201) unter android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:603) unter android.support.v7.app.AppCompatActivity.onStart (AppCompatActivity.java:181) unter com.shay .vagabond.Activities.ViewLocationActivity.onStart (ViewLocationActivity.java:691) bei android.app. Instrumentation.callActivityOnStart (Instrumentation.java:1248) unter android.app.Activity.performStart (Activity.java:6681) unter android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2609) at android.app.ActivityThread.handleLaunchActivity (ActivityThread .java: 2707) bei android.app.ActivityThread.-wrap12 (ActivityThread.java) unter android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460) unter android.os.Handler.dispatchMessage (Handler.java:102) Bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:6077) bei java.lang.reflect.Method.invoke (Native Method) bei com.android. internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:865) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755)

Antwort

0

ich weiß nicht, ob dies ist ein ideal s Lösung, aber da ich keine Antwort darauf hatte, was dieses Verhalten im Skobbler SDK verursachen könnte, konnte ich dieses Problem lösen, indem ich einfach das problematische Fragment, das den SKMapsViewHolder aufbläst und enthält, aus dem Backstack löscht, wenn onCreate() aufgerufen wird. (Wird aufgerufen, wenn der Prozess vom Betriebssystem zerstört wird). Dies zwingt die Aktivität, das Fragment neu zu initialisieren & das Fragment zu erstellen, das das Problem zu lösen scheint. Hoffe es hilft jemandem irgendwann

private void initializeViews() { 
    // Setting the pre-arrival layout 
    setContentView(R.layout.view_location_layout); 
    initializeNavigationDrawer(); 
    initializeBottomSheet(); 
    initializeProgressBar(); 
    removeAllFragments(); 
} 

private void removeAllFragments() { 
    while (fragmentManager.getBackStackEntryCount() > 0) 
     fragmentManager.popBackStackImmediate(); 
} 
0

Dieses Problem wurde behoben und das Update wird in der nächsten SKMaps Release-Version verfügbar sein.