omunicación de fragmento a fragmento de Android: actualice la vista de reciclaje del ReceiverFragment a través de la interfaz

Tengo dos fragmentos y estoy tratando de actualizar la vista de reciclaje del ReceiverFragment a través de la interfaz. Ambos fragmentos tienen su propio adaptador (SenderAdapter y ReceiverAdapter).

ebo mencionar que también tengo dos SQLDatabase, donde group.db se usa para llenar el SenderFragment y client.db se usa para llenar ReceiverFragment.

But ReceiverFragment solo se completará si se marca un CheckBox en SenderAdapter.

Toda la comunicación entre los fragmentos está bien. Cuando marco una casilla de verificación, SenderAdapter envía un mensaje a MainActivity y MainActivity envía el mismo mensaje a ReceiverFragment.

Esto es SenderFragment:

Este sería el resultado deseado.

Cuando uso el mensaje de la interfaz para leer el client.db, obtengo la nullException.

Este es el fragmento receptor:

public class ReceiverFragment extends Fragment {

    View view;
    private RecyclerView mClientList;
    private RecyclerView.Adapter mClientListAdapter;
    private RecyclerView.LayoutManager mClientListLayoutManager;

    private String receivedFromSender;

    ArrayList<ClientObject> clientList;

    SQLiteDatabase clientListTable;
    ClientRepository clientRepository;


    private static String rootPath = Environment.getExternalStorageDirectory()+"/PassKeyBF/";


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

    public String getMessageFromSender(String message){
        if (message != null) {
            receivedFromSender = message;
            Log.i("debinf recfrag", "message from sender (function) is : " + receivedFromSender);

            //Log.i("debinf recgfrag", "mContext in interface : " + mContext);

            if (message != null) {
                if (new File(rootPath + receivedFromSender, "client.db").isFile()) {
                    clientReading(message);
                }
            }                                  


        }

        return null;

    }

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

        // If I use mContext instead of getContext(), I get rid of the context error showed below.
        //mContext = getContext();

        clientList = new ArrayList<>();

        initializeRecyclerView();
        //clientReading("-LWBPaM7RA9UOcUVty79");

        return view;
    }

    private void clientReading(String pathToClientTable) {

        if (new File(rootPath + pathToClientTable, "client.db").isFile()) {

            Log.i("debinf recgfrag", "mContext in clientReading" + mContext);

            ClientDatabaseHelper clientDatabaseHelper = new ClientDatabaseHelper(mContext,"client.db", rootPath+pathToClientTable+"/");

            clientListTable = clientDatabaseHelper.getReadableDatabase();
            clientRepository = new ClientRepository(clientListTable);

            clientList = clientRepository.SearchAllClients();
            Log.i("debinf recfrag", "clientList in clientReading is " + clientList.get(0).getName());
            mClientListAdapter = new ReceiverAdapter(mContext,clientList);
            mClientList.setAdapter(mClientListAdapter);
            //mClientListAdapter.notifyDataSetChanged();

        }

    }

    private void initializeRecyclerView() {

        mClientList = (RecyclerView) view.findViewById(R.id.clientList);
        mClientList.setNestedScrollingEnabled(false);
        mClientList.setHasFixedSize(false);
        mClientListLayoutManager = new LinearLayoutManager(mContext,LinearLayout.VERTICAL,false);
        mClientList.setLayoutManager(mClientListLayoutManager);

        mClientListAdapter = new ReceiverAdapter(mContext,clientList);
        mClientList.setAdapter(mClientListAdapter);

    }

}

Este es el ReceiverAdapter

public class ReceiverAdapter extends RecyclerView.Adapter<ReceiverAdapter.ReceiverViewHolder> {

    ArrayList<ClientObject> clientList;
    Context mContext;

    private ReceiverAdapter adapter;

    public ReceiverAdapter(Context mContext, ArrayList<ClientObject> clientList) {
        this.clientList = clientList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public ReceiverViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_callcenter_client, null, false);

        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);

        ReceiverViewHolder rcv = new ReceiverViewHolder(layoutView);
        return rcv;
    }

    @Override
    public void onBindViewHolder(@NonNull ReceiverViewHolder holder, int position) {

        holder.mName.setText(clientList.get(position).getName());
        holder.mPhone.setText(clientList.get(position).getPhone());

    }

    @Override
    public int getItemCount() {
        return clientList.size();
    }

    public class ReceiverViewHolder extends RecyclerView.ViewHolder {

        public TextView mName, mPhone;
        //public LinearLayout mLayout;

        public ReceiverViewHolder(@NonNull View itemView) {
            super(itemView);

            mName = (TextView) itemView.findViewById(R.id.client_name);
            mPhone = (TextView) itemView.findViewById(R.id.client_phone);
            //mLayout = (LinearLayout) itemView.findViewById(R.id.layoutItemClient);
        }
    }
}

EDITA

He cambiado el ReceiverFragment para que sea más comprensible.

Ese es el ERROR FATAL que obtengo cuando uso getContext (). Simplemente no puedo hacer una conexión con mi SQLDatabase.

2019-01-31 15:41:45.118 22318-22318/com.example.aliton.passkeybetweenfrags E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.aliton.passkeybetweenfrags, PID: 22318
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:352)
        at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:322)
        at com.example.aliton.passkeybetweenfrags.ReceiverFragment.clientReading(ReceiverFragment.java:104)
        at com.example.aliton.passkeybetweenfrags.ReceiverFragment.getMessageFromSender(ReceiverFragment.java:53)
        at com.example.aliton.passkeybetweenfrags.MainActivity.getMessage(MainActivity.java:64)
        at com.example.aliton.passkeybetweenfrags.SenderAdapter$1.onCheckedChanged(SenderAdapter.java:54)
        at android.widget.CompoundButton.setChecked(CompoundButton.java:171)
        at android.widget.CompoundButton.toggle(CompoundButton.java:127)
        at android.widget.CompoundButton.performClick(CompoundButton.java:132)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        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:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Ahora, cuando suprimo getContext () y lo hago estático en mContext. Puedo establecer una conexión con SQLDatabase, pero recibo este error FATAL porque ReceiverAdapter:

2019-01-31 15:35:05.541 21936-21936/com.example.aliton.passkeybetweenfrags E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.aliton.passkeybetweenfrags, PID: 21936
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
        at com.example.aliton.passkeybetweenfrags.ReceiverFragment.clientReading(ReceiverFragment.java:110)
        at com.example.aliton.passkeybetweenfrags.ReceiverFragment.getMessageFromSender(ReceiverFragment.java:53)
        at com.example.aliton.passkeybetweenfrags.MainActivity.getMessage(MainActivity.java:64)
        at com.example.aliton.passkeybetweenfrags.SenderAdapter$1.onCheckedChanged(SenderAdapter.java:54)
        at android.widget.CompoundButton.setChecked(CompoundButton.java:171)
        at android.widget.CompoundButton.toggle(CompoundButton.java:127)
        at android.widget.CompoundButton.performClick(CompoundButton.java:132)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        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:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.inter,nal.os.ZygoteInit.main(ZygoteInit.java:858)

Puedo obtener un error al leer SQLDatabase (client.db) o al actualizar ReceiverAdapter.

Este es el enlace para la carpeta principal de la aplicación:

https: //1drv.ms/u/s! AjteqjTsJm9qgn6kODT9OJmMcY4e

Este es el enlace a la base de datos SQL (group.db y client.db)

https: //1drv.ms/u/s! AjteqjTsJm9qgn_L52cz3lDWOOWe

Respuestas a la pregunta(1)

Su respuesta a la pregunta