IonaMc
IonaMc

Reputation: 45

Android app null error

I am creating a restaurant app that requires an expandable listview to show a menu for the waiter to take a customer's menu. The app is crashing and I think it has something to do with the code below:

public class Menu extends AppCompatActivity {

     HashMap < String, List < String >> Food_menu;
     List < String > Food_list;
     ExpandableListView Exp_list;
     FoodMenuAdapter adapter;

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

         Exp_list = (ExpandableListView) findViewById(R.id.exp_list);
         Food_menu = DataProvider.getInfo();
         Food_list = new ArrayList < String > (Food_menu.keySet());
         adapter = new FoodMenuAdapter(this, Food_menu, Food_list);
         Exp_list.setAdapter(adapter);


     }
 }

When I debugged the app, it said that:

Exp_list
Food_menu
Food_list 

were all coming back as null. I'm new to android studios and I'm not sure how to remedy the problem. Any help would be greatly appreciated, thanks.

Logcat:

04-11 22:05:53.841 1960-1960/com.example.ben.restaurantapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.example.ben.restaurantapp, PID: 1960
                                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ben.restaurantapp/com.example.ben.restaurantapp.Menu}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ExpandableListView.setAdapter(android.widget.ExpandableListAdapter)' on a null object reference
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:144)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:135)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5221)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:372)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
                                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ExpandableListView.setAdapter(android.widget.ExpandableListAdapter)' on a null object reference
                                                                             at com.example.ben.restaurantapp.Menu.onCreate(Menu.java:38)
                                                                             at android.app.Activity.performCreate(Activity.java:5937)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                             at android.os.Looper.loop(Looper.java:135) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5221) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Upvotes: 0

Views: 1663

Answers (2)

Nikola
Nikola

Reputation: 2132

From your logcat you can see the exact problem:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ExpandableListView.setAdapter(android.widget.ExpandableListAdapter)' on a null object reference

which means that at the point you try to use setAdapter method on the Exp_List, the said variable is null.

What you can do from here on is to check if your layout activity_main actually contains an ExpandableListView with an id of exp_list (maybe post your layout?).

Your question should not be android studio null error as the null has nothing to do with Android Studio - it comes from the programming language, in this specific case - Java.

You can learn how to fix NullPointerExceptions here.

Upvotes: 1

Dane Lowrey
Dane Lowrey

Reputation: 180

I think the second parameter of your FoodMenuAdapter has to be a resource layout file.

For example:

    Food Food_menu = DataProvider.getInfo();
    adapter = new FoodMenuAdapter(this, R.layout.your_xml_layout_here, Food_list);
    Exp_list = (ExapandableListView) findViewById(R.id.exp_list);
    Exp_list.setAdapter(adapter);

Where your_xml_layout_here is the layout that all the information will be displayed on. Keep in mind that an adapter is the middleman of information and what you see on your application screen.

Upvotes: 1

Related Questions