无法通过Crashlytics启动活动ComponentInfo {..}:java.lang.NullPointerException。无法重现

时间:2014-05-30 09:58:51

标签: java android nullpointerexception android-activity

对于约20%的用户群,他们获得了Unable to start activity ComponentInfo{..} : java.lang.NullPointerException致命异常。我通过Crashlytics远程监控异常,所以我有堆栈跟踪。唯一的问题是,没有行号。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.falk.fietsroutes.app/com.falk.fietsroutes.app.HomeActivity}: java.lang.NullPointerException
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
       at android.app.ActivityThread.access$800(ActivityThread.java:157)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:157)
       at android.app.ActivityThread.main(ActivityThread.java:5293)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
       at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
       at com.falk.fietsroutes.app.SearchResultsFragment.onCreateView()
       at android.app.Fragment.performCreateView(Fragment.java:1700)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1044)
       at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1853)
       at android.app.Activity.performCreate(Activity.java:5392)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2340)
       at android.app.ActivityThread.access$800(ActivityThread.java:157)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:157)
       at android.app.ActivityThread.main(ActivityThread.java:5293)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
       at dalvik.system.NativeStart.main(NativeStart.java)

我已经阅读了许多具有相同错误的人的报告,这些报告都归结为他们的代码中的某些内容为null(当然,因为它是一个nullpointer)。但我无法追踪它,因为我无法重现它(我只有一个看起来工作正常的设备),堆栈跟踪没有帮助。

乍一看我在SearchResultsFragment.onCreateView()中找不到任何可能为空的东西(因为那是NPE被抛向右边的地方?)

如果你们中的任何一个人能指出我正确的方向或知道如何获得异常的行号,我们将不胜感激!

以下是SearchResultsFragment.onCreateView()的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Set orientation
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    // Get the rootview in the fragment
    View rootView = inflater.inflate(R.layout.fragment_search_results, container, false);

    // Get settings instance
    mSettings = Settings.getInstance();
    // Init the mRoutes arraylist
    mRoutes = new ArrayList<Route>();
    // Get the gridview and set the adapters (animation adapter and the gridview adapter)
    GridView gridView = (GridView) rootView.findViewById(R.id.gridview);
    SearchResultCardsAdapter searchAdapter = new SearchResultCardsAdapter(getActivity(), inflater);
    SwingBottomInAnimationAdapter swingBottomInAnimationAdapter = new SwingBottomInAnimationAdapter(searchAdapter);
    swingBottomInAnimationAdapter.setAbsListView(gridView);
    swingBottomInAnimationAdapter.setInitialDelayMillis(300);
    mAdapter = swingBottomInAnimationAdapter;
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Log.d("Grid item click", "Clicked!");
            Route route = mRoutes.get(i);
            Intent routeDetailIntent = new Intent(getActivity(), RouteDetailActivity.class);
            routeDetailIntent.putExtra("routeId", route.id);
            // Analytics
            Tracker t = ((AppDelegate) getActivity().getApplication()).getTracker(
                    AppDelegate.TrackerName.APP_TRACKER);
            // Build and send an Event.
            t.send(new HitBuilders.EventBuilder()
                    .setCategory("Routes")
                    .setAction("View")
                    .setLabel(Integer.toString(route.id))
                    .build());

            startActivity(routeDetailIntent);
        }
    });
    gridView.setAdapter(mAdapter);

    // Set the infinite scroll listener
    gridView.setOnScrollListener(new EndlessScrollListener() {
        @Override
        public void onLoadMore(int page, int totalItemsCount) {
            // Triggered only when new data needs to be appended to the list
            // Add whatever code is needed to append new items to your AdapterView
            loadMoreRoutes(page, totalItemsCount);
            // or customLoadMoreDataFromApi(totalItemsCount);
        }
    });

    // Show the progressbar
    mProgressBar = (SmoothProgressBar)rootView.findViewById(R.id.search_results_progressbar);
    mProgressBar.progressiveStart();

    // Inflate the layout for this fragment
    return rootView;
}

1 个答案:

答案 0 :(得分:1)

也许其他人会从我的错误中受益。问题是我使用pro-guard和Android Studio签署我的Android应用程序,我不得不keep-attributes一些属性,所以Crashlytics可以读取行号和类名。

-keepattributes SourceFile,LineNumberTable

Via