Java 尝试生成警报对话框时出现空指针异常

Java 尝试生成警报对话框时出现空指针异常,java,android,nullpointerexception,Java,Android,Nullpointerexception,尽管我选择不为ListAdapter使用单独的类,但我一直在尝试使用问题答案中给出的代码。 当我尝试启动我的活动(InfosActivity)时,应用程序崩溃,下面是日志: 05-02 11:50:22.195 7521-7521/com.example.uia59227.User_and_Car_Data E/AndroidRuntime: FATAL EXCEPTION: main

尽管我选择不为ListAdapter使用单独的类,但我一直在尝试使用问题答案中给出的代码。 当我尝试启动我的活动(InfosActivity)时,应用程序崩溃,下面是日志:

05-02 11:50:22.195 7521-7521/com.example.uia59227.User_and_Car_Data E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.example.uia59227.User_and_Car_Data, PID: 7521
                                                                                  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.uia59227.User_and_Car_Data/com.example.uia59227.User_and_Car_Data.InfosActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2849)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
                                                                                      at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                      at android.os.Looper.loop(Looper.java:154)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:6776)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
                                                                                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
                                                                                      at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)
                                                                                      at com.example.uia59227.User_and_Car_Data.InfosActivity.<init>(InfosActivity.java:223)
                                                                                      at java.lang.Class.newInstance(Native Method)
                                                                                      at android.app.Instrumentation.newActivity(Instrumentation.java:1086)
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2839)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
                                                                                      at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                      at android.os.Looper.loop(Looper.java:154) 
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:6776) 
                                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386) 

您能帮助我吗?

问题是您在声明中实例化了ListAdapter。因此,实例化是在InfoActivity类的实例化过程中完成的(在完成实例化之前)。如果InfoActivity尚未完成实例化,
null
。因此,当您执行
getApplicationContext()
时,您正在执行
此操作。getApplicationContext()
但是
为空

在活动实例化之后,必须实例化ListAdapter。例如,您可以在onStart()方法中实例化Listadapter



此外,如本文所述,如果您需要活动上下文,请使用
this
而不是
getApplicationContext()

发布完整的堆栈跟踪,并向我们显示NullPointerException指向哪一行,但我不确定异常发生在哪里导致错误的那一行是InfoActivity中的第223行然后是我的ListAdapter适配器的声明,但我不知道我能在一个活动中对此做些什么?您不需要使用getapplicationcontext,而是使用它,对于上下文@downvoter,您能提供反馈吗?因此,我可以改进我的回答。当我仍然有一个空点异常指向行
holder.icon.setImageDrawable(drawable)。在getview的定义中,我在
parent
上有一个警告,说
未注释的参数覆盖@NonNull parameter
,我不知道这是否是我的错误的原因。这意味着
holder
icon
为null<如果执行else和convertView,则code>holder
为null。getTag()返回null<如果您通过if和
findViewById()
找不到具有
R.id.icon
作为id的视图,或者您通过else,并且
convertView.getTag()
返回的对象有一个为null的字段图标OK,这对我来说不容易理解,但我做到了,更改了
convertView.findViewById(R.id.icon)这是不存在的(我不明白为什么我没有任何错误)进入
findViewById(R.id.Car)
中,它实际上存在,并且有效。谢谢
String[] items = {"airplanes", "animals", "cars", "colors", "flowers", "letters", "monsters", "numbers", "shapes", "smileys", "sports", "stars" };

ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_row, items) {

    ViewHolder holder;
    Drawable icon;

    class ViewHolder {
        ImageView icon;
        TextView title;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        final LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_row, null);

            holder = new ViewHolder();
            holder.icon = (ImageView) convertView.findViewById(R.id.icon);
            holder.title = (TextView) convertView.findViewById(R.id.title);
            convertView.setTag(holder);
        } else {
            // view already defined, retrieve view holder
            holder = (ViewHolder) convertView.getTag();
        }

        Drawable drawable = ContextCompat.getDrawable(context,R.drawable.ic_person); //this is an image from the drawables folder

        holder.title.setText(items[position]);
        holder.icon.setImageDrawable(drawable);

        return convertView;
    }
};
quickReviewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
            alertDialogBuilder
                    .setTitle("Full report")
                    .setAdapter(adapter, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int item) {
                            Toast.makeText(InfosActivity.this, "You selected: " + items[item], Toast.LENGTH_LONG).show();
                            dialog.dismiss();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
        }
    });