Android应用null错误

时间:2016-04-11 21:44:29

标签: android nullpointerexception expandablelistview

我正在创建一个餐厅应用程序,需要一个可扩展的列表视图,以显示服务员采取客户菜单的菜单。该应用程序崩溃,我认为它与下面的代码有关:

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);


     }
 }

当我调试应用程序时,它说:

Exp_list
Food_menu
Food_list 

全都回来了。我是Android工作室的新手,我不知道如何解决这个问题。非常感谢任何帮助,谢谢。

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) 

2 个答案:

答案 0 :(得分:1)

我认为FoodMenuAdapter的第二个参数必须是资源布局文件。

例如:

    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);

其中your_xml_layout_here是将显示所有信息的布局。请记住,适配器是信息的中间人以及您在应用程序屏幕上看到的内容。

答案 1 :(得分:1)

从您的logcat中可以看到确切的问题:

  

引起:java.lang.NullPointerException:尝试调用虚方法&#39; void android.widget.ExpandableListView.setAdapter(android.widget.ExpandableListAdapter)&#39;在空对象引用上

这意味着,当您尝试在setAdapter上使用Exp_List方法时,所述变量为null

您可以在此处执行的操作是检查您的布局activity_main是否实际包含ExpandableListView id exp_list(可能会发布您的布局?)。

你的问题不应该是android studio null error因为null与Android Studio无关 - 它来自编程语言,在这种特定情况下是Java。

您可以了解如何修复NullPointerExceptions here