При попытке открыть фрагмент появляются эти ошибки

Я симпатичный новичок в разработке приложений для Android. Я пытаюсь открыть приложение для создания электронной книги. И приложение запущено. Но когда я пытаюсь открыть фрагмент загрузки, возникает эта ошибка, и приложение вылетает! Вот код Java для активности фрагмента - пакет com.domain.app.Fragment;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.loopj.android.http.*;

import com.domain.app.Activity.MainActivity;
import com.domain.app.Activity.Search;
import com.domain.app.Adapter.DownloadAdapter;
import com.domain.app.DataBase.DatabaseHandler;
import com.domain.app.Item.DownloadList;
import com.domain.app.R;
import com.domain.app.Util.Constant_Api;
import com.wang.avi.AVLoadingIndicatorView;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;


public class DownloadFragment extends Fragment {

    private RecyclerView recyclerView;
    private AVLoadingIndicatorView progressBar;
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private DownloadAdapter downloadAdapter;
    public MenuItem searchItem;
    private List<File> inFiles;
    private List<DownloadList> downloadListsCompair;
    private String root;
    private DatabaseHandler db;
    private ProgressDialog progressDialog;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = LayoutInflater.from(getActivity()).inflate(R.layout.category_fragment, container, false);

        MainActivity.toolbar.setTitle(getResources().getString(R.string.download));

        db = new DatabaseHandler(getActivity());
        progressDialog = new ProgressDialog(getActivity());

        inFiles = new ArrayList<>();
        downloadListsCompair = new ArrayList<>();
        root = Environment.getExternalStorageDirectory() + "/appName/";

        mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipeRefresh_category_fragment);
        progressBar = (AVLoadingIndicatorView) view.findViewById(R.id.progressbar_category_fragment);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView_category_fragment);

        progressBar.hide();

        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setFocusable(false);

        mSwipeRefreshLayout.setColorSchemeResources(R.color.toolbar);
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Execute().execute();
                mSwipeRefreshLayout.setRefreshing(false);
            }
        });

        new Execute().execute();

        setHasOptionsMenu(true);
        return view;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.search_menu, menu);

        searchItem = menu.findItem(R.id.ic_searchView);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextListener((new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                startActivity(new Intent(getActivity(), Search.class)
                        .putExtra("search", query));
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return true;
            }
        }));

        MenuItemCompat.setOnActionExpandListener(searchItem,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem item) {
                        // Do something when collapsed
                        return true; // Return true to collapse action view
                    }

                    @Override
                    public boolean onMenuItemActionExpand(MenuItem item) {
                        // Do something when expanded
                        return true; // Return true to expand action view
                    }
                });

        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // action with ID action_refresh was selected
            default:
                break;
        }

        return super.onOptionsItemSelected(item);
    }

    class Execute extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            progressDialog.show();
            progressDialog.setMessage(getResources().getString(R.string.loading));
            progressDialog.setCancelable(false);
            Constant_Api.downloadLists.clear();
            inFiles.clear();
            downloadListsCompair.clear();
            Constant_Api.db = new DatabaseHandler(getContext());
            Constant_Api.downloadLists = Constant_Api.db.getDownload();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {
            File file = new File(root);
            getListFiles(file);
            getDownloadLists(inFiles);
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            downloadAdapter = new DownloadAdapter(getActivity(), downloadListsCompair);
            recyclerView.setAdapter(downloadAdapter);
            progressDialog.dismiss();
            super.onPostExecute(s);
        }
    }

    private List<File> getListFiles(File parentDir) {
        // List<File> inFiles = new ArrayList<>();
        Queue<File> files = new LinkedList<>();
        files.addAll(Arrays.asList(parentDir.listFiles()));
        while (!files.isEmpty()) {
            File file = files.remove();
            if (file.isDirectory()) {
                files.addAll(Arrays.asList(file.listFiles()));
            } else if (file.getName().endsWith(".epub") || file.getName().endsWith(".pdf")) {
                inFiles.add(file);
            }
        }
        return inFiles;
    }

    private List<DownloadList> getDownloadLists(List<File> list) {
        for (int i = 0; i < Constant_Api.downloadLists.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                if (list.get(j).toString().contains(Constant_Api.downloadLists.get(i).getUrl())) {
                    downloadListsCompair.add(Constant_Api.downloadLists.get(i));
                    break;
                } else {
                    if (j == list.size() - 1) {
                        db.deletePdf(Constant_Api.downloadLists.get(i).getId());
                    }
                }
            }
        }
        return downloadListsCompair;
    }

}

И вот ошибка, которую я вижу в окне запуска в Android Studio -

    V/FA: Inactivity, disconnecting from the service
I/zygote: JIT allocated 56KB for compiled code of void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
                  Process: com.domain.app, PID: 12493
                  java.lang.RuntimeException: An error occurred while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:353)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:271)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                      at java.lang.Thread.run(Thread.java:764)
                   Caused by: java.lang.NullPointerException
                      at java.util.Objects.requireNonNull(Objects.java:203)
                      at java.util.Arrays$ArrayList.<init>(Arrays.java:3741)
                      at java.util.Arrays.asList(Arrays.java:3728)
                      at com.domain.app.Fragment.DownloadFragment.getListFiles(DownloadFragment.java:181)
                      at com.domain.app.Fragment.DownloadFragment.access$500(DownloadFragment.java:43)
                      at com.domain.app.Fragment.DownloadFragment$Execute.doInBackground(DownloadFragment.java:164)
                      at com.domain.app.Fragment.DownloadFragment$Execute.doInBackground(DownloadFragment.java:146)
                      at android.os.AsyncTask$2.call(AsyncTask.java:333)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
                      at java.lang.Thread.run(Thread.java:764) 
E/RecyclerView: No adapter attached; skipping layout
V/FA: Recording user engagement, ms: 10252
V/FA: Connecting to remote service
V/FA: Activity paused, time: 4589154
D/FA: Logging event (FE): adunit_exposure(_xu), Bundle[{firebase_event_origin(_o)=am, ad_unit_id(_ai)=ca-app-pub-3940256099942544/6300978111, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=751889283038278768, exposure_time(_xt)=9442}]
V/FA: Connection attempt already in progress
D/FA: Logging event (FE): ad_exposure(_xa), Bundle[{firebase_event_origin(_o)=am, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=751889283038278768, exposure_time(_xt)=9442}]
V/FA: Connection attempt already in progress
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=10252, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=751889283038278768}]
V/FA: Connection attempt already in progress
      Not logging ad unit exposure. No active activity
      Not logging ad exposure. No active activity
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 4
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
D/EGL_emulation: eglMakeCurrent: 0xe62e4f20: ver 2 0 (tinfo 0xe624c000)
E/WindowManager: android.view.WindowLeaked: Activity com.domain.app.Activity.MainActivity has leaked window DecorView@2ec76c[] that was originally added here
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:485)
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
                     at android.app.Dialog.show(Dialog.java:330)
                     at com.domain.app.Fragment.DownloadFragment$Execute.onPreExecute(DownloadFragment.java:150)
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:648)
                     at android.os.AsyncTask.execute(AsyncTask.java:595)
                     at com.domain.app.Fragment.DownloadFragment.onCreateView(DownloadFragment.java:91)
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2343)
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1421)
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752)
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821)
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595)
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382)
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337)
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244)
                     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:702)
                     at android.os.Handler.handleCallback(Handler.java:790)
                     at android.os.Handler.dispatchMessage(Handler.java:99)
                     at android.os.Looper.loop(Looper.java:164)
                     at android.app.ActivityThread.main(ActivityThread.java:6494)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
V/FA: Inactivity, disconnecting from the service
I/Ads: Ad is not visible. Not refreshing ad.
       Scheduling ad refresh 60000 milliseconds from now.
I/Ads: Ad is not visible. Not refreshing ad.
       Scheduling ad refresh 60000 milliseconds from now.

Пожалуйста, помогите мне найти настоящую проблему и как ее решить! Заранее спасибо... :)

parentDir.listFiles(), скорее всего, возвращает null, что означает, что это, вероятно, не каталог.
TheWanderer 26.09.2018 20:12

root - это каталог, объявленный здесь. Итак, могу ли я использовать root.listFiles ()? Пробовал, но тоже не сработало ... :(

eatherpro 26.09.2018 20:27

Что находится в строке 181 согласно трассировке стека?

TheWanderer 26.09.2018 20:28

files.addAll (Arrays.asList (parentDir.listFiles ()));

eatherpro 26.09.2018 20:30

Убедитесь, что значение parentDir.listFiles() равно нулю.

TheWanderer 26.09.2018 20:41

Это не ноль, потому что внутри doInBackground() перечислены File file = new File(root); getListFiles(file);. И корень также объявлен поверх файла, где он указывает на действительный каталог!

eatherpro 26.09.2018 20:49

Что вы имеете в виду под «перечисленными getListFiles(file);»? Это метод, в котором происходит сбой.

TheWanderer 26.09.2018 20:51

Не возражаете, если я пришлю вам проект, и вы увидите его в студии android?

eatherpro 26.09.2018 20:54

Конечно. Выложите на GitHub.

TheWanderer 26.09.2018 20:55

Могу я получить вашу электронную почту, пожалуйста? По какой-то причине я не могу сейчас выложить его в публичный репозиторий. Но я могу вас послать! У меня здесь недостаточно очков репутации, поэтому я тоже не могу отправить вас в чат! Думаю, я не понимаю проблемы. Но я думаю, вы найдете в кратчайшие сроки ... :)

eatherpro 26.09.2018 21:02

Моя электронная почта находится в моем профиле GitHub, ссылка на который вы можете найти в моем профиле SO.

TheWanderer 26.09.2018 21:08

Я отправил вам ссылку для скачивания! :)

eatherpro 26.09.2018 21:11

После обновления зависимостей и исправления некоторых проблем в имеющихся у вас библиотеках проблем со сбоями не возникало. Я рекомендую вам исправить эти проблемы. Кроме того, AsyncTasks должен быть статическим. Все, что у вас есть в onPreExecute(), может быть помещено во фрагмент перед выполнением AsyncTask, и вы можете передать обратный вызов AsyncTask, чтобы запустить то, что вам нужно в onPostExecute().

TheWanderer 26.09.2018 21:37

Вы можете прислать мне экспортированный zip-архив? Это будет очень полезно, поскольку я не знаю, как обновить эти зависимости и что мне следует обновить! :)

eatherpro 26.09.2018 21:40

@TheWanderer проблема все еще существует. Когда вы запускаете приложение, пропустите действие входа в систему, затем откройте панель меню и нажмите на параметр «Загрузить», чтобы открыть фрагмент загрузки. Тогда действительно возникает проблема. В остальном все остальное в приложении работает отлично!

eatherpro 26.09.2018 22:29

Я сделал это, и это было нормально. На скольких устройствах вы это тестировали?

TheWanderer 26.09.2018 23:04

Только на эмуляторе. Но позвольте мне проверить это на моем реальном устройстве!

eatherpro 26.09.2018 23:35

Неа. Только что протестировал на моем устройстве Android 8.0. Но он все время рушится на одном и том же месте. Он вылетает только тогда, когда я пытаюсь открыть в меню опцию «Загрузки». Обратите внимание, что в вашей версии DownloadFragment.java такой же, как и мой старый. Я не вижу обновлений, которые вы упомянули в своем последнем комментарии. Может быть, этого не хватает с моей стороны и проблема остается!

eatherpro 26.09.2018 23:42

Я только что обновил некоторые зависимости в Gradle и код в тех библиотеках, которые вы включили.

TheWanderer 26.09.2018 23:51

Я работаю над проектом, который вы прислали мне по электронной почте. Но все равно эти ошибки попадают в журнал! Мне надоело!

eatherpro 27.09.2018 00:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
20
101
0

Другие вопросы по теме