1

I am getting this exception opening a Fragment in the MainActivity only in the signed apk and not in the debug version.

FATAL EXCEPTION: main

Process: com.curieo.podcast, PID: 15376 Theme: themes:{} java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference at com.curieo.podcast.ui.c.c.f(Unknown Source) at com.curieo.podcast.ui.c.c.a(Unknown Source) at com.curieo.podcast.e.a.a(Unknown Source) at com.curieo.podcast.e.a.onPostExecute(Unknown Source) at android.os.AsyncTask.finish(AsyncTask.java:651) at android.os.AsyncTask.-wrap1(AsyncTask.java) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

This is the fragment which throws the error

public class DiscoverFragment extends BaseFragment implements DownloadFeedUrlsFromServerTask.DownloadFeedUrlsFromServerTaskInterface, LoaderManager.LoaderCallbacks<Cursor> {

    ExpandableHeightGridView featuredListView;

    TwoWayGridView popularListView, trendingListView;
    private ServerFeed[] feeds;
    ArrayList<ServerFeed> popularList, featuredList, trendingList;
    AVLoadingIndicatorView progress;

    public DiscoverFragment() {
        // Required empty public constructor
    }

    private BroadcastReceiver podcastAddedReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            progress.setVisibility(View.GONE);
            progress.smoothToHide();
            popularListView.setAlpha(1);
            featuredListView.setAlpha(1);
            trendingListView.setAlpha(1);
            popularListView.setClickable(true);
            featuredListView.setClickable(true);
            trendingListView.setClickable(true);
            switch (intent.getAction()) {
                case BroadcastHelper.INTENT_PODCAST_PROCESSED:
                    if (intent.getBooleanExtra(BroadcastHelper.EXTRA_SUCCESS, false)) {
                        Channel channel = Parcels.unwrap(intent.getParcelableExtra(BroadcastHelper.EXTRA_CHANNEL));
                        ChannelProfileActivity.openChannelProfile((BaseActivity) getActivity(),
                                channel, null, false);
                    }
                    break;
            }
        }
    };

    @Override
    protected int getLayoutResourceId() {
        return R.layout.fragment_discover;
    }

    @Override
    protected int getFragmentTitleResourceId() {
        return R.string.title_fragment_discover;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View root = inflater.inflate(R.layout.fragment_discover, container, false);

        initUI(root);
        return root;
    }

    @Override
    public void onResume() {
        super.onResume();
        BroadcastHelper.registerReceiver(getActivity(), podcastAddedReceiver,
                BroadcastHelper.INTENT_PODCAST_PROCESSED, BroadcastHelper.INTENT_OPML_PROCESS_FINISH);
    }

    @Override
    public void onPause() {
        super.onPause();
        BroadcastHelper.unregisterReceiver(getActivity(), podcastAddedReceiver);
    }

    @Override
    public void processRequestResponse(String response) {
        if (response != null && !response.isEmpty()) {
            Gson gson = new Gson();
            this.feeds = gson.fromJson(response, ServerFeed[].class);
            this.populateItems();
        }
    }

    private void populateItems() {

        for (int i = 0; i < this.feeds.length; i++) {
            if (this.feeds[i].getWeight() < 100) {
                Log.e("", "populateItems: " + this.feeds[i].getWeight());
                popularList.add(this.feeds[i]);

            } else if (this.feeds[i].getWeight() > 100 && this.feeds[i].getWeight() < 200) {
                Log.e("", "populateItems " + this.feeds[i].getWeight());

                featuredList.add(this.feeds[i]);

            } else if (this.feeds[i].getWeight() > 200) {
                Log.e("", "populateItems " + this.feeds[i].getWeight());

                trendingList.add(this.feeds[i]);
            }
        }

        CustomFeaturedDiscoverAdapter adapter = new CustomFeaturedDiscoverAdapter(getActivity(), R.layout.featured_discover_list_item, popularList);
        CustomFeaturedDiscoverAdapter adapter1 = new CustomFeaturedDiscoverAdapter(getActivity(), R.layout.featured_discover_list_item, featuredList);
        CustomFeaturedDiscoverAdapter adapter2 = new CustomFeaturedDiscoverAdapter(getActivity(), R.layout.featured_discover_list_item, trendingList);
        featuredListView.setAdapter(adapter1);
        popularListView.setAdapter(adapter);
        trendingListView.setAdapter(adapter2);
        popularListView.setOnItemClickListener((parent, view, position, id) -> {
            podcastOnCLick(popularList, position);

        });

        featuredListView.setOnItemClickListener((adapterView, view, i, l) -> {
            podcastOnCLick(featuredList, i);
        });

        trendingListView.setOnItemClickListener((parent, view, position, id) -> {
            podcastOnCLick(trendingList, position);

        });
    }

    private void podcastOnCLick(ArrayList<ServerFeed> featuredList, int i) {

        PodcastSyncService.addPodcastFromUrl(getActivity(), featuredList.get(i).getFeed_link());
        progress.setVisibility(View.VISIBLE);
        progress.smoothToShow();
        featuredListView.setAlpha((float) 0.40);
        popularListView.setAlpha((float) 0.40);
        trendingListView.setAlpha((float) 0.40);
        Toast.makeText(getActivity(), "Please wait, while the podcast loads.", Toast.LENGTH_LONG).show();
        featuredListView.setClickable(false);
        popularListView.setClickable(false);
        trendingListView.setClickable(false);
    }

    private void initUI(View view) {
        progress = (AVLoadingIndicatorView) view.findViewById(R.id.progress_bar_discover_screen);
        popularListView = (TwoWayGridView) view.findViewById(R.id.listview_discover);
        featuredListView = (ExpandableHeightGridView) view.findViewById(R.id.listview_featured);
        trendingListView = (TwoWayGridView) view.findViewById(R.id.listview_trending);
        popularList = new ArrayList<>();
        featuredList = new ArrayList<>();
        trendingList = new ArrayList<>();

        if (this.feeds == null) {
            DownloadFeedUrlsFromServerTask downloadFeedUrlsFromServerTask = new DownloadFeedUrlsFromServerTask();
            downloadFeedUrlsFromServerTask.downloadFeedUrlsFromServerTaskInterface = this;
            downloadFeedUrlsFromServerTask.execute();
        }
    }

    public static DiscoverFragment newInstance(Bundle args) {
        DiscoverFragment fragment = new DiscoverFragment();

        if (args != null) {
            fragment.setArguments(args);
        }

        return fragment;
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return null;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {

    }
}
Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98
Saransh Agarwal
  • 305
  • 5
  • 18

1 Answers1

0

Some services (like firebase login, push notification) require you to generate SHA certificate fingerprint; that's how such Services identify your app, so you would be able to use their services. Debug and Release variants each generate different fingerprints. Therefor for that particular Service, your app in Debug mode is a different app from the release mode, so if your async task is requesting data, and it's not authorized, then it's returning null, and you didn't handle null values, so the crash happens. Either way, you should handle null values: if... else, or at least a try catch thing. Cheers,