【问题标题】:Unable to start activity ComponentInfo{..} : java.lang.NullPointerException via Crashlytics. Cannot reproduce无法通过 Crashlytics 启动活动 ComponentInfo{..}:java.lang.NullPointerException。无法重现
【发布时间】:2014-05-30 09:58:51
【问题描述】:

对于我大约 20% 的用户群,他们得到了 Unable to start activity ComponentInfo{..} : java.lang.NullPointerExceptionFATAL 异常。我通过 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)

我已经阅读了许多来自具有相同错误的人的报告,所有这些都归结为他们的代码中的某些内容为空(当然,因为它是一个空指针)。但我无法追踪它,因为我无法重现它(我只有一个似乎可以正常工作的设备),并且堆栈跟踪也无济于事。

乍一看,我在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;
}

【问题讨论】:

    标签: java android nullpointerexception android-activity


    【解决方案1】:

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

    -keepattributes SourceFile,LineNumberTable
    

    Via

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2014-07-18
      • 1970-01-01
      • 2014-05-10
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多