Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在这段代码中得到一个空对象引用?_Java_Android_Android Fragments - Fatal编程技术网

Java 为什么我在这段代码中得到一个空对象引用?

Java 为什么我在这段代码中得到一个空对象引用?,java,android,android-fragments,Java,Android,Android Fragments,我正在开发一个使用片段的应用程序。一个片段将显示一个运行良好的用户列表。另一个片段将显示访问级别列表。访问级别列表不工作。访问等级列表的代码如下所示: /** * The fragment onCreateView Method * * @param inflater the layout inflater * @param container the container that will hold the fragment * @param savedInstanceState t

我正在开发一个使用片段的应用程序。一个片段将显示一个运行良好的用户列表。另一个片段将显示访问级别列表。访问级别列表不工作。访问等级列表的代码如下所示:

/**
 * The fragment onCreateView Method
 *
 * @param inflater the layout inflater
 * @param container the container that will hold the fragment
 * @param savedInstanceState the saved instance state
 * @return View object container the fragment view
 */
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_grade_list, container, false);
    assert getArguments() != null;
    String coName = getArguments().getString("CoName");
    String apiUrl = getArguments().getString("ApiUrl");
    update = getArguments().getBoolean("update");
    remove = getArguments().getBoolean("remove");
    new ManagerAdminApi(apiUrl);
    RecyclerView gRecyclerView = view.findViewById(R.id.recyclerViewGradeList);
    LinearLayoutManager gLayoutManager = new LinearLayoutManager(this.getActivity());
    **gRecyclerView.setHasFixedSize(true);**
    gAdapter = new FragmentGradeList.GradeAdapter(gradeList);
    gRecyclerView.setLayoutManager(gLayoutManager);
    gRecyclerView.setAdapter(gAdapter);
    TextView tvTitle = view.findViewById(R.id.tvTitle);
    tvTitle.setText(getString(R.string.grade_list_title, coName));
    readGrades();
    return view;
}
这与我在用户列表中使用的代码几乎相同,但是我在Android Studio的logcat窗口中发现了以下错误:

2020-07-15 06:42:08.670 8019-8019/com.phoenixhosman.phoenixdbmanagers E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.phoenixhosman.phoenixdbmanagers, PID: 8019
    java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference
        at com.phoenixhosman.phoenixdbmanagers.FragmentGradeList.onCreateView(FragmentGradeList.java:68)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6714)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:503)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
这意味着在粗体显示的行上有一个空对象引用。我已经反复检查了我的代码,我找不到为什么它是空的。我的整个片段代码文件如下:

/*
    The Phoenix Hospitality Management System
    Database Manager App
    Grade List Fragment Code File
    Copyright (c) 2020 By Troy Marker Enterprises
    All Rights Under Copyright Reserved

    The code in this file was created for use with the Phoenix Hospitality Management System (PHMS).
    Use of this code outside the PHMS is strictly prohibited.
 */
package com.phoenixhosman.phoenixdbmanagers;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
 * Grade List Fragment code file
 * @author Troy Marker
 * @version 1.0.0
 */
public class FragmentGradeList extends Fragment {
    private RecyclerView.Adapter gAdapter;
    static InterfaceDataPasser dataPasser;
    public static Boolean update;
    public static Boolean remove;
    private final ArrayList<ObjectGrade> gradeList = new ArrayList<>();

    public FragmentGradeList() {
    }

    /**
     * The fragment onCreateView Method
     *
     * @param inflater the layout inflater
     * @param container the container that will hold the fragment
     * @param savedInstanceState the saved instance state
     * @return View object container the fragment view
     */
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_grade_list, container, false);
        assert getArguments() != null;
        String coName = getArguments().getString("CoName");
        String apiUrl = getArguments().getString("ApiUrl");
        update = getArguments().getBoolean("update");
        remove = getArguments().getBoolean("remove");
        new ManagerAdminApi(apiUrl);
        RecyclerView gRecyclerView = view.findViewById(R.id.recyclerViewGradeList);
        LinearLayoutManager gLayoutManager = new LinearLayoutManager(this.getActivity());
        gRecyclerView.setHasFixedSize(true);
        gAdapter = new FragmentGradeList.GradeAdapter(gradeList);
        gRecyclerView.setLayoutManager(gLayoutManager);
        gRecyclerView.setAdapter(gAdapter);
        TextView tvTitle = view.findViewById(R.id.tvTitle);
        tvTitle.setText(getString(R.string.grade_list_title, coName));
        readGrades();
        return view;
    }

    /**
     * Method to read the Grade list from the database
     */
    public void readGrades() {
        gradeList.clear();
        Call<String> call = ManagerAdminApi.getInstance().getApi().grade();
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
                String body = response.body();
                try {
                    assert body != null;
                    JSONObject obj = new JSONObject(body);
                    if(obj.optString("success").equals("true")) {
                        JSONArray data = obj.getJSONArray("data");
                        for (int i = 0; i < data.length(); i++) {
                            JSONObject datum = data.getJSONObject(i);
                            gradeList.add(new ObjectGrade(
                                    datum.getInt("id"),
                                    datum.getString("grade")
                            ));
                        }
                        gAdapter.notifyDataSetChanged();
                    } else {
                        Toast.makeText(getContext(), obj.optString("message"), Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
            }
        });
    }

    /**
     * recyclerviewUserList display adapter
     */
    public static class GradeAdapter extends RecyclerView.Adapter<FragmentGradeList.GradeAdapter.GradeViewHolder> {
        final private List<ObjectGrade> mGradeList;

        static class GradeViewHolder extends RecyclerView.ViewHolder {
            final TextView tvId;
            final TextView tvGrade;
            GradeViewHolder(View gradeView) {
                super(gradeView);
                tvId = gradeView.findViewById(R.id.tvId);
                tvGrade = gradeView.findViewById(R.id.tvGrade);
            }
        }
        GradeAdapter(ArrayList<ObjectGrade> gradelist) {
            mGradeList = gradelist;
        }
        @NonNull
        @Override
        public FragmentGradeList.GradeAdapter.GradeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_grade_list_item, parent,false);
            return new FragmentGradeList.GradeAdapter.GradeViewHolder(v);
        }
        @Override
        public void onBindViewHolder(@NonNull final FragmentGradeList.GradeAdapter.GradeViewHolder holder, int position) {
            final ObjectGrade currentGrade = mGradeList.get(position);
            holder.tvId.setText(String.valueOf(currentGrade.getId()));
            if (update) {
                holder.tvId.setTextColor(Color.parseColor("#06F522"));
            }
            if (remove) {
                holder.tvId.setTextColor(Color.parseColor("#FF2579"));
            }
            holder.tvGrade.setText(currentGrade.getGrade());
            if (update) {
                holder.tvId.setOnClickListener(v -> dataPasser.onGradeUpdate(currentGrade.getId()));
            }
            if (remove) {
                holder.tvId.setOnClickListener(v -> dataPasser.onGradeRemove(currentGrade.getId()));
            }
        }
        @Override
        public int getItemCount() {
            return mGradeList.size();
        }
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        dataPasser = (InterfaceDataPasser) context;
    }


}
/*
菲尼克斯酒店管理系统
数据库管理器应用程序
等级表片段代码文件
特洛伊Marker Enterprises版权所有(c)2020
版权所有
此文件中的代码创建用于Phoenix酒店管理系统(PHMS)。
严禁在PHMS之外使用此代码。
*/
包com.phoenixhosman.phoenixdbmanagers;
导入android.content.Context;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
2.电话;;
2.回拨;
2.回应;;
/**
*等级表片段代码文件
*@作者特洛伊马克
*@version 1.0.0
*/
公共类FragmentGradeList扩展了Fragment{
专用回收器查看适配器;
静态接口数据转换器;
公共静态布尔更新;
公共静态布尔删除;
private final ArrayList gradeList=新建ArrayList();
公共碎片分级表(){
}
/**
*片段onCreateView方法
*
*@param充气器布局充气器
*@param container将保存碎片的容器
*@param savedInstanceState保存的实例状态
*@返回视图对象容器片段视图
*/
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u grade\u list,container,false);
断言getArguments()!=null;
字符串coName=getArguments().getString(“coName”);
字符串apiUrl=getArguments().getString(“apiUrl”);
update=getArguments().getBoolean(“更新”);
remove=getArguments().getBoolean(“remove”);
新经理拉德米纳皮(apiUrl);
RecyclerView gRecyclerView=view.findViewById(R.id.recyclerViewGradeList);
LinearLayoutManager gLayoutManager=新的LinearLayoutManager(this.getActivity());
setHasFixedSize(true);
gAdapter=新碎片等级列表。等级适配器(等级列表);
setLayoutManager(gLayoutManager);
设置适配器(gAdapter);
TextView-tvTitle=view.findViewById(R.id.tvTitle);
setText(getString(R.string.grade_list_title,coName));
readGrades();
返回视图;
}
/**
*方法从数据库中读取成绩列表
*/
公共图书馆等级({
gradeList.clear();
Call Call=ManagerAdminApi.getInstance().getApi().grade();
call.enqueue(新回调(){
@凌驾
public void onResponse(@NonNull调用,@NonNull响应){
字符串body=response.body();
试一试{
断言主体!=null;
JSONObject obj=新的JSONObject(主体);
if(obj.optString(“success”).equals(“true”)){
JSONArray data=obj.getJSONArray(“数据”);
对于(int i=0;i<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="@string/grade_list_title"
        android:textSize="36sp" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">
        <TextView
            android:layout_width="75dp"
            android:layout_height="wrap_content"
            android:background="@drawable/x_border_3"
            android:gravity="center_horizontal"
            android:text="@string/id"
            android:textAllCaps="true"
            android:textColor="@color/Phoenix_Black" />
        <TextView
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:background="@drawable/x_border_3"
            android:gravity="center"
            android:text="@string/grade_1"
            android:textAllCaps="true"
            android:textColor="@color/Phoenix_Black" />
    </LinearLayout>
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewGradeList"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal"/>
</LinearLayout>