尝试调用虚方法' void android.widget.ListView.setAdapter(android.widget.ListAdapter)'在null对象引用上

时间:2016-10-13 13:47:22

标签: android nullpointerexception

我在登录页面输入详细信息(用户名和密码),然后我在ListView中显示应用程序中注册的所有用户的所有详细信息。

我使用ImageView,用户名和密码填充ListView。

当我将页面从Login页面重定向到HomePage(我在其中有ListView)时,我收到了null异常的错误。

Homepage.java

public class HomePage extends AppCompatActivity {


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

        ListView listView=(ListView)findViewById(R.id.listUserDetails);

        DBhelperClass obj1=new DBhelperClass(this);
        Cursor f=obj1.display();

        AdapterForHomePage obj=new AdapterForHomePage(this,f,0);
        listView.setAdapter(obj);

    }
}

AdapterForHomePage.java(这是一个用于填充ListView的自定义CursorAdapter)。

public class AdapterForHomePage extends CursorAdapter {


    LayoutInflater inflater;

    public AdapterForHomePage(Context context, Cursor c, int i) {
        super(context, c);
        inflater=LayoutInflater.from(context);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        View v= inflater.inflate(R.layout.homepagelist,parent,false);
        return  v;

    }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {

        TextView name=(TextView)view.findViewById(R.id.displayName);
        TextView emailId=(TextView)view.findViewById(R.id.displayEmail);
           // ImageView phoneCall=(ImageView)view.findViewById(R.id.displayCallImage);
            TextView phoneNumber=(TextView)view.findViewById(R.id.displayPhone);



            String n=cursor.getString(cursor.getColumnIndex("NAME"));
            String e=cursor.getString(cursor.getColumnIndex("EMAILID"));
            String p=cursor.getString(cursor.getColumnIndex("PHONENUMBER"));

            name.setText(n);
            emailId.setText(e);
            phoneNumber.setText(p);

        }
}

我的DBhelper

这是在HomePage.java类中调用的显示函数

public Cursor display()
    {
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor cs=db.rawQuery("SELECT * FROM USERINFO",null);
        return cs;


    }

我得到的错误是:

Java.lang.RuntimeException: Unable to start activity 
   ComponentInfo{com.example.hsports.bandpop/com.example.hsports.bandpop.HomePage} java.lang.NullPointerException: Attempt to invoke virtual method 'void     android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object    reference

我在CustomAdapter对象中收到错误 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

你没有在oncreate()上完成setContentView(R.layout.yourlayout)。

答案 1 :(得分:0)

您需要致电

setContentView(R.layout.you_activity_layout);

在进行ListView的引用之前

答案 2 :(得分:0)

在对布局中的setContentView进行任何引用之前,您必须致电View

为什么?

setContentView(R.layout.your_layout)创建对您的布局的引用。没有它,您的活动不知道您所处的布局,因此它不知道视图(在您的情况下,您的ListView)。

我该如何解决?

您有两种选择:

  1. setContentView(R.layout.yourLayout)
  2. 之前致电 ListView listView=(ListView)findViewById(R.id.listUserDetails);
  3. 如果您不想设置布局,可以使用LayoutInflater,如下所示:

    View v = getActivity().getLayoutInflater().inflate(R.layout.yourLayout,null);

    然后,当您想要获得ListView时,请使用v.findViewById代替findViewById