Адаптер RecyclerView дает нулевое исключение внутри фрагмента - PullRequest
0 голосов
/ 06 августа 2020

В моем приложении я использую действие android с вкладками. Я получаю данные из сети и хочу распределить их на двух вкладках. Я делаю свой сетевой вызов внутри своей основной деятельности и отправляю эти данные в виде строки json на обе вкладки, которые я собираюсь отобразить в Recyclerview. Я использую интерфейс для отправки данных как на вкладки, так и для передачи данных без каких-либо проблем. Моя проблема в том, что я получаю исключение NullPointerException от адаптера, который находится внутри Fragment .

Activity

public class MyHistoryTabbedActivity extends AppCompatActivity {

    public SendDataInterfaceTab1 sdInfaceOne;
    public SendDataInterfaceTab2 sdInfaceTwo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_history_tabbed);

        ViewPager viewPager = findViewById(R.id.view_pager);
        TabLayout tabs = findViewById(R.id.tabs);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        viewPager.setAdapter(sectionsPagerAdapter);
        tabs.setupWithViewPager(viewPager);

        sdInfaceOne = new AdmissionFragment();
        sdInfaceTwo = new DischargeFragment();

...

        getHistoryList(userId, sFromDate, sToDate);

      ...

    }

    private void getHistoryList(String userId, String fDate, String tDate) {

      
      
            StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_MY_HISTORY, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    try {
                        JSONObject jObj = new JSONObject(response);

                        if (jObj.getString("authStatus").equals("1")) {

                            String admitJson = jObj.getString("admitList");
                            String dischJson = jObj.getString("dischList");

                            sdInfaceOne.sendData(admitJson);
                            sdInfaceTwo.sendData(dischJson);

                        } else {

                            Toast.makeText(getApplicationContext(), jObj.getString("authMesg"), Toast.LENGTH_SHORT).show();

                        }


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            }) {



            };

    
    }

    public interface SendDataInterfaceTab1 {
        void sendData(String message);
    }

    public interface SendDataInterfaceTab2 {
        void sendData(String message);
    }
}

AdmissionFragment

public class AdmissionFragment extends Fragment implements MyHistoryTabbedActivity.SendDataInterfaceTab1 {

  private RecyclerView admissionRecycler;
    private AdmissionAdapter aAdapter;

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_admission, container, false);

        admissionRecycler = view.findViewById(R.id.admissionRecycler);

        Context context = view.getContext();

        aAdapter = new AdmissionAdapter(context);
        admissionRecycler.setLayoutManager(new LinearLayoutManager(context));
        admissionRecycler.setAdapter(aAdapter);

        return view;

    }

    @Override
    public void sendData(String message) {

        if (message != null) {

            Gson gson = new Gson();
            ArrayList<MyHistoryData> admitList = gson.fromJson(message, new TypeToken<ArrayList<MyHistoryData>>() {
            }.getType());

            Log.d("admitList", String.valueOf(admitList.size()));

            if (admitList.size() > 0) {
                aAdapter.setJsonData(admitList);
                admissionRecycler.setAdapter(aAdapter);
            }

        }

    }

}

Я получаю сообщение об ошибке в этой строке aAdapter.setJsonData (admitList);

LogCat

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.slic.suraksha.adapter.AdmissionAdapter.setJsonData(java.util.ArrayList)' on a null object reference
        at com.slic.suraksha.fragment.AdmissionFragment.sendData(AdmissionFragment.java:106)
        at com.slic.suraksha.activities.MyHistoryTabbedActivity$3.onResponse(MyHistoryTabbedActivity.java:199)
        at com.slic.suraksha.activities.MyHistoryTabbedActivity$3.onResponse(MyHistoryTabbedActivity.java:187)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
        at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7266)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

1 Ответ

0 голосов
/ 07 августа 2020

Может быть, потому что вы устанавливаете адаптер recyclerview два раза, один в onCreateView, а другой в методе sendData. Попробуйте удалить первый и оставьте другой для sendData.

Попробуйте оставить admissionRecycler.setAdapter(aAdapter); вашего onCreateView, удалите другой и после aAdapter.setJsonData(admitList); введите aAdapter.notifyDataSetChanged();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...