получение исключения nullpointerexception в подписанном apk с неизвестным источником

Я получаю это исключение, открывающее Fragment в MainActivity только в подписанном apk, а не в отладочной версии.

FATAL EXCEPTION: главная

Процесс: com.curieo.podcast, PID: 15376 Тема: themes: {} java.lang.NullPointerException: попытка вызвать виртуальный метод int java.lang.Integer.intValue () для ссылки на нулевой объект в com.curieo. podcast.ui.ccf (Неизвестный источник) на com.curieo.podcast.ui.cca (Неизвестный источник) на com.curieo.podcast.eaa (Неизвестный источник) на com.curieo.podcast.eaonPostExecute (Неизвестный источник) на android .os.AsyncTask.finish (AsyncTask.java:651) в android.os.AsyncTask.-wrap1 (AsyncTask.java) в android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:668) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:148) в android.app .ActivityThread.main (ActivityThread.java:5461) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) в com.android .internal.os.ZygoteInit.main (ZygoteInit.java:616)

Это фрагмент, который вызывает ошибку

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) {

    }
}

person Saransh Agarwal    schedule 06.07.2017    source источник


Ответы (1)


Некоторые службы (например, вход в firebase, push-уведомление) требуют, чтобы вы сгенерировали отпечаток сертификата SHA; именно так такие службы идентифицируют ваше приложение, чтобы вы могли пользоваться их услугами. Варианты отладки и выпуска генерируют разные отпечатки пальцев. Поэтому для этой конкретной службы ваше приложение в режиме отладки отличается от режима выпуска, поэтому, если ваша асинхронная задача запрашивает данные, а она не авторизована, она возвращает значение null, а вы этого не сделали. t обрабатывают нулевые значения, поэтому происходит сбой. В любом случае вы должны обрабатывать нулевые значения: if ... else или, по крайней мере, попытаться поймать вещь. Ваше здоровье,

person Mohammad Ali Fouani    schedule 06.07.2017