当前位置: 首页 > 知识库问答 >
问题:

活动的OnStart()中的SKMaps Android跟踪错误

慕才
2023-03-14

我最近升级了我的应用程序,使用了SKMaps 3.0.2,似乎一切都正常工作,只是当我的活动(“ViewLocationActivity”)(它调用了一个扩展Android.support.v4.app.Fragment(“NewMapFragment”)的片段,在后台运行了一段时间之后重新启动,并且调用了onStart()方法,该片段无法膨胀SKMapViewWholder并崩溃。我已经附上了日志,但它的原因似乎是这一行

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)

这种情况在以前的SDK版本中没有发生,特别奇怪,因为它不是在首次加载片段时发生的,而是在调用onStart()时才发生的。

相关代码段

@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:

共有1个答案

赏高格
2023-03-14

我不知道这是否是一个理想的解决方案,但由于我没有得到Skobbler SDK中可能导致这种行为的答案,所以我设法解决了这个问题,只需在调用onCreate()(如果进程被OS破坏,则调用onCreate()时从后堆栈中删除有问题的片段,该片段膨胀并包含SkMapsViewWholder)。这迫使活动重新初始化&重新创建片段,这似乎解决了问题。我希望它在某一时刻对某人有帮助

    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();
}
 类似资料:
  • 问题内容: 我正在尝试转储所有活动线程的列表,包括每个线程的当前堆栈。我可以使用threading.enumerate()获得所有线程的列表,但是我不知道从那里到堆栈的方法。 背景:Zope / Plone应用程序有时会出现故障,消耗100%的cpu,需要重新启动。我觉得这是一个循环,无法正常终止,但是我无法在test- environemt中重现该循环以进行验证。我设法注册了可以从外部触发的信号

  • 在工作中,当通过firebase门户创建动态链接时,我们尝试使用可选的活动跟踪UTM参数。 动态链接工作正常,据我所知,从所有官方文档中可以看出,在创建动态链接时,只需在最后一个可选步骤中添加UTM值,就应该会导致这些值与事件一起发送。 但是,当我们在dynamic_link_app_open事件的事件或转化标签上查看没有看到任何归因值。我们看到该事件正在发送,但我们只是没有获得广告系列归因值,因

  • 问题内容: 有没有一种方法可以为java中的特定线程输出调用跟踪? 我不需要堆栈跟踪。我想在每个对象上进行一系列调用以进行跟踪。 问题答案: 我想您可能会发现这很有趣。它是一个Java代理,它使用slf4j框架将日志记录添加到方法中,从而实际记录输出。然后,只需配置日志记录框架以仅打印出您感兴趣的线程即可。 http://www.slf4j.org/extensions.html#javaagen

  • 问题内容: 我的同事在工作中提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表中相关字段的变化有关。 想象一下,我们有3个表,每个表20个字段。在此示例中,我们考虑这些表中的每一个都有2个字段,一个名为LastUpdatedOn,另一个名为LastUpdatedBy。 如果我们只想跟踪这3个表中的更改,而只跟踪几个特定字段,而没有为每个表创建包含更新前最新版本的历史表,那么我们如何跟踪这些

  • 问题内容: 我正在从python开发C扩展,并且获得了一些段错误(在开发过程中不可避免…)。 我正在寻找一种显示段错误发生在哪一行代码的方法(一个想法就像跟踪每一行代码),我该怎么做? 问题答案: 这是一种输出代码运行的Python每行的文件名和行号的方法: 输出: (当然,您可能希望将跟踪输出写入文件。)