Java 使用TabLayout片段[不重复]处理NavigationDrawer片段时出现问题

Java 使用TabLayout片段[不重复]处理NavigationDrawer片段时出现问题,java,android,android-fragments,Java,Android,Android Fragments,我有一个应用程序具有以下主要设置(不包括其他布局): main_display.xml:本质上是一个抽屉设置,带有一个框架布局,我用每个视图替换它 主刷新器片段:包含TabLayout和ViewPager,以及SwipeRefreshLayout和RecyclerView[注意:此RecyclerView由从网站上刮取的数据填充] 问题Ijava.lang.NullPointerException:println需要一条消息。我不知道为什么这个变量是空的。我还收到了日志消息:E/标记周期:MP2

我有一个应用程序具有以下主要设置(不包括其他布局):

  • main_display.xml:本质上是一个抽屉设置,带有一个框架布局,我用每个视图替换它
  • 主刷新器片段:包含TabLayout和ViewPager,以及SwipeRefreshLayout和RecyclerView[注意:此RecyclerView由从网站上刮取的数据填充]
  • 问题I
    java.lang.NullPointerException:println需要一条消息。我不知道为什么这个变量是空的。我还收到了日志消息:
    E/标记周期:MP2
    何时应该是MP1(也称为我的第一个选项卡标题)。现在,我也问过类似的问题,但他们没有对我有用的答案,因此我请求帮助。对于如何使此设置正确运行,如有任何建议,将不胜感激

    我的main_display.xml如下所示:

    我的主显示类:

    最后,我的GradeRefresherFragment课程的相关部分:


    注意:问题不在于我的抓取代码,因为在我添加选项卡之前,它正在处理我的NavigationDrawer片段

    println需要一条消息
    通常意味着调用的是带有空参数的
    Log
    方法。除此之外,还不清楚到底是什么问题。@MikeM。然而,我意识到,我不清楚为什么这个参数是空的(很抱歉,我不清楚),我在那个代码中只看到一个
    Log
    调用,用来打印
    位置,而这不应该造成这种情况。请发布堆栈跟踪。@MikeM。我用我的Scraper类的
    doInBackground
    部分更新了代码,这是
    Log
    调用的发源地您需要从参数
    Bundle
    中获取
    Scraper
    mMarkingPeriod
    ,而不是从
    newInstance()中设置的字段中获取。
    
    <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <FrameLayout
            android:id="@+id/flContent"
            android:layout_width="0dp"
            android:layout_height="551dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"/>
        <android.support.design.widget.NavigationView
            android:id="@+id/nvView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#FF303030"
            app:headerLayout="@layout/navigation_header"
            app:menu="@menu/drawer_view" />
    </android.support.v4.widget.DrawerLayout>
    
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="0dp"
        android:paddingTop="0dp"
        tools:context="com.scyon.studentaid.MainDisplay">
        <include
            layout="@layout/toolbar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/include" />
        <android.support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            tools:layout_editor_absoluteY="0dp"
            tools:layout_editor_absoluteX="8dp" />
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@android:color/white"
            tools:layout_editor_absoluteY="0dp"
            tools:layout_editor_absoluteX="16dp" />
        <android.support.v4.widget.SwipeRefreshLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/refresher"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            <com.scyon.studentaid.AnimatedRecyclerView
                android:id="@+id/grade_recycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
            </com.scyon.studentaid.AnimatedRecyclerView>
        </android.support.v4.widget.SwipeRefreshLayout>
    
    public class MarkingPeriodFragmentAdapter extends FragmentPagerAdapter {
    
    private String [] tabTitles = new String[]{"MP1", "MP2", "MP3", "MP4"};
    Context context;
    
    public MarkingPeriodFragmentAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
    }
    
    @Override
    public Fragment getItem(int position) {
    
        Log.e("Position", String.valueOf(position));
        return GradeRefresherFragment.newInstance(tabTitles[position]) ;
    }
    
    @Override
    public int getCount() {
        return 4;
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }
    }
    
    public class MainDisplay extends AppCompatActivity {
    
    DrawerLayout drawerLayout;
    NavigationView navigationView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_display);
    
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction;
    
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.flContent, GradeRefresherFragment.newInstance("MP1"));
        fragmentTransaction.commit();
    
        navigationView = (NavigationView)findViewById(R.id.nvView);
        setupDrawerContents(navigationView);
    
    }
    
    @Override
    public void onBackPressed() {
    }
    
    private void setupDrawerContents(NavigationView navigationView) {
    
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                displayView(item.getItemId());
                return true;
            }
        });
    }
    
    private void displayView (int viewID) {
    
        FragmentManager fragmentManager = getSupportFragmentManager();
    
        Fragment fragment;
        FragmentTransaction fragmentTransaction;
    
    
        switch (viewID) {
    
            case R.id.nav_gradebook_fragment:
                fragment = GradeRefresherFragment().newInstance("MP1");
    
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.flContent, fragment);
                fragmentTransaction.commit();
                break;
    
            case R.id.nav_shcedule_fragment:
                fragment = new ScheduleFragment();
    
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.flContent, fragment);
                fragmentTransaction.commit();
                break;
    
            case R.id.nav_logout_fragment:
    
                Intent intent = new Intent(getApplicationContext(), LoginScreen.class);
    
                SessionManager sessionManager = new SessionManager(getApplicationContext());
                sessionManager.logout();
                startActivity(intent);
    
                break;
    
            default:
                fragment = GradeRefresherFragment().newInstance("MP1");
    
                fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.flContent, fragment);
                fragmentTransaction.commit();
                break;
        }
    
    
        drawerLayout.closeDrawers();
    
    }
    
    public class GradeRefresherFragment extends Fragment{
    
    Toolbar toolbar;
    DrawerLayout mDrawer;
    SwipeRefreshLayout swipeRefreshLayout;
    ActionBarDrawerToggle mDrawerToggle;
    
    ViewPager viewPager;
    TabLayout tabLayout;
    
    static String mMarkingPeriod;
    
    public static GradeRefresherFragment newInstance(String markingPeriod){
    
        GradeRefresherFragment instance = new GradeRefresherFragment();
    
        Bundle arguments = new Bundle();
        arguments.putString("mp", markingPeriod);
        instance.setArguments(arguments);
    
        return instance;
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    
        new Scraper(getArguments().getString("mp")).execute();
    
        super.onCreate(savedInstanceState);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        View view = inflater.inflate(R.layout.main_refresher_fragment, container, false);
    
        toolbar = (Toolbar)view.findViewById(R.id.toolbar);
        AppCompatActivity activity = ((AppCompatActivity)getActivity());
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
        mDrawer = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawer, toolbar, R.string.drawer_open, R.string.drawer_close);
        mDrawer.addDrawerListener(mDrawerToggle);
    
        mDrawerToggle.syncState();
    
        viewPager = (ViewPager)view.findViewById(R.id.viewpager);
        viewPager.setAdapter(new MarkingPeriodFragmentAdapter(getFragmentManager(), getActivity()));
    
        tabLayout = (TabLayout)view.findViewById(R.id.sliding_tabs);
        tabLayout.setupWithViewPager(viewPager);
    
    
        return view;
    }
    private class Scraper extends AsyncTask<String, Void, Wrapper> {
    
        String mMarkingPeriod;
    
        public Scraper(String markingPeriod) {
            mMarkingPeriod = markingPeriod;
        }
    
        @Override
        protected Wrapper doInBackground(String... strings) {
            Wrapper wrapper = new Wrapper();
    
            SessionManager sessionManager = new SessionManager(getContext());
            String username = sessionManager.getUsername();
            String password = sessionManager.getPassword();
    
    
            DataManager dataManager = new DataManager(username,password);
            Map<String, String> preLoginCookies = dataManager.getPreLoginCookies();
            Map<String, String> postLoginCookies = dataManager.getPostLoginCookies(preLoginCookies);
    
            Document doc = dataManager.getMPDocument(postLoginCookies,mMarkingPeriod);
    
            Log.e("Marking Period", mMarkingPeriod);
    
            if (doc == null){
                Log.e("doInBackground Check", "null");}
    
            Elements elements = doc.select(".cellRight");
    
            wrapper.document = doc;
            wrapper.elements = elements;
    
            return wrapper;
        }
    
    04-15 23:59:27.883 7127-7127/com.scyon.studentaid E/Checkpoint: IsLoggedIn: true
    04-15 23:59:28.429 7127-7127/com.scyon.studentaid E/Position: 0
    04-15 23:59:28.429 7127-7127/com.scyon.studentaid E/Position: 1
    04-15 23:59:28.502 7127-7127/com.scyon.studentaid E/RecyclerView: No adapter attached; skipping layout
    04-15 23:59:28.503 7127-7127/com.scyon.studentaid E/RecyclerView: No adapter attached; skipping layout
    04-15 23:59:28.503 7127-7127/com.scyon.studentaid E/RecyclerView: No adapter attached; skipping layout
    04-15 23:59:29.671 7127-7282/com.scyon.studentaid E/Marking Period: MP1
    04-15 23:59:29.680 7127-7127/com.scyon.studentaid E/Checkpoint: Iterating elements
    04-15 23:59:29.681 7127-7127/com.scyon.studentaid E/Checkpoint: Setting up Recycler
    04-15 23:59:30.886 7127-7313/com.scyon.studentaid E/Marking Period: MP1
    04-15 23:59:30.888 7127-7127/com.scyon.studentaid E/Checkpoint: Iterating elements
    04-15 23:59:30.889 7127-7127/com.scyon.studentaid E/Checkpoint: Setting up Recycler
    04-15 23:59:32.024 7127-7334/com.scyon.studentaid E/Marking Period: MP2
    04-15 23:59:32.024 7127-7334/com.scyon.studentaid E/doInBackground Check: null
    
    
    --------- beginning of crash
    04-15 23:59:32.026 7127-7334/com.scyon.studentaid E/AndroidRuntime: 
    FATAL EXCEPTION: AsyncTask #3
    
    Process: com.scyon.studentaid, PID: 7127
    
    java.lang.RuntimeException: An error occurred while executing doInBackground()
    
    at android.os.AsyncTask$3.done(AsyncTask.java:318)
    
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
    
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    
    at java.lang.Thread.run(Thread.java:761)
    
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual 
    method 'org.jsoup.select.Elements 
    org.jsoup.nodes.Document.select(java.lang.String)' on a null object reference