Ivan
Ivan

Reputation: 11

Refresh ListView from another activity using interface class but adapter cause null object issue

Here's my expected result :

MainActivity has a toolbar (Refresh icon) and TAB

FGT_Monitor Activity has a ListView

Click on Refresh icon from Toolbar, it will call FGT_Monitor's Refresh_Listview to refresh the Listview.

Here's my extracted code:

     public class MainActivity extends AppCompatActivity {

        public final FGT_Monitor fgt_monitor = new FGT_Monitor();

        private OnRefresh_Monitor_Listview_Clicked onRefresh_Monitor_Listview_Clicked;

        public interface OnRefresh_Monitor_Listview_Clicked {
            void Refresh_Monitor_Listview();
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);

             onRefresh_Monitor_Listview_Clicked = fgt_monitor;
        }

        public interface OnRefresh_Monitor_Listview_Clicked {
             void Refresh_Monitor_Listview();
        }
     }

     public class FGT_Monitor extends Fragment implements MainActivity.OnRefresh_Monitor_Listview_Clicked {

         @Override
         public void Refresh_Monitor_Listview() {
               Refresh_Listview();
         }

         private void Refresh_Listview() {
                monitorList = new ArrayList<>();
                monitorList.clear();
                if (Create_Data_Array()) {
                    adapter.notifyDataSetChanged();
                 }
         }

     }

     public class FGT_Monitor_ListView_Adapter extends BaseAdapter {

         private List<DB_Monitor> monitorList;
         private LayoutInflater inflater;

         public FGT_Monitor_ListView_Adapter(Context context, List<DB_Monitor> monitorList){
                inflater=(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
                this.monitorList=monitorList;
     }
     }

However, the above coding causes Fatal Exception. It's due to the "adapter" pointed to a null object reference.

E/AndroidRuntime: FATAL EXCEPTION: main Process: co.example.chengivan.plantwaterringsystem, PID: 6492 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference at co.example.chengivan.plantwaterringsystem.FGT_Monitor_ListView_Adapter.(FGT_Monitor_ListView_Adapter.java:19) at co.example.chengivan.plantwaterringsystem.FGT_Monitor.Refresh_Listview(FGT_Monitor.java:123) at co.example.chengivan.plantwaterringsystem.FGT_Monitor.Refresh_Monitor_Listview(FGT_Monitor.java:116) at co.example.chengivan.plantwaterringsystem.MainActivity.onOptionsItemSelected(MainActivity.java:555) at android.app.Activity.onMenuItemSelected(Activity.java:3204) at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:407) at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195) at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:108) at android.support.v7.app.AppCompatDelegateImplV9.onMenuItemSelected(AppCompatDelegateImplV9.java:674) at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822) at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171) at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973) at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:963) at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:624) at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:150) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22265) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

Please advise how I can fix the above issue. If no idea, do I have another way to do same thing?

Thanks in advance.

Upvotes: 0

Views: 67

Answers (1)

faranjit
faranjit

Reputation: 1637

Log says your context is null in adapter class. I mean you passed a null context when create a new adapter.

Upvotes: 0

Related Questions