Android 无法从数据库检索数据以完成listview

Android 无法从数据库检索数据以完成listview,android,android-activity,android-listview,android-database,Android,Android Activity,Android Listview,Android Database,我正在使用数据库来完成列表视图。但我遇到了一个没有解决的问题。 当我创建lugar类的变量lugar时,问题就出现了 下面是分类代码Lugar: public class Lugar { private String nombre; private String direccion; private GeoPuntoAlt posicion; private String foto; private int telefono; private St

我正在使用数据库来完成列表视图。但我遇到了一个没有解决的问题。 当我创建lugar类的变量lugar时,问题就出现了

下面是分类代码Lugar:

public class Lugar {
    private String nombre;
    private String direccion;
    private GeoPuntoAlt posicion;
    private String foto;
    private int telefono;
    private String url;
    private String comentario;
    private long fecha;
    private float valoracion;
    private TipoLugar tipo;

    public Lugar(String nombre, String direccion, double longitud,
                 double latitud, double altura, TipoLugar tipo,  int telefono, String url, String comentario,
                 int valoracion) {
        fecha = System.currentTimeMillis();
        posicion = new GeoPuntoAlt(longitud, latitud, altura);
        this.nombre = nombre;
        this.direccion = direccion;
        this.telefono = telefono;
        this.url = url;
        this.comentario = comentario;
        this.valoracion = valoracion;
        this.tipo = tipo;
        fecha = System.currentTimeMillis();
        posicion = new GeoPuntoAlt(longitud, latitud, altura);
        tipo = TipoLugar.OTROS;
    }


    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public GeoPunto getPosicion() {
        return posicion;
    }

    public void setPosicion(GeoPuntoAlt posicion) {
        this.posicion = posicion;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public int getTelefono() {
        return telefono;
    }

    public void setTelefono(int telefono) {
        this.telefono = telefono;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    public long getFecha() {
        return fecha;
    }

    public void setFecha(long fecha) {
        this.fecha = fecha;
    }

    public float getValoracion() {
        return valoracion;
    }

    public void setValoracion(float valoracion) {
        this.valoracion = valoracion;
    }

    public TipoLugar getTipo() {
        return tipo;
    }

    public void setTipo(TipoLugar tipo) {
        this.tipo = tipo;
    }

    @Override
    public String toString() {
        return "Lugar{" +
                "nombre='" + nombre + '\'' +
                ", direccion='" + direccion + '\'' +
                ", posicion=" + posicion +
                ", foto='" + foto + '\'' +
                ", telefono=" + telefono +
                ", url='" + url + '\'' +
                ", comentario='" + comentario + '\'' +
                ", fecha=" + fecha +
                ", valoracion=" + valoracion +
                ", tipo=" + tipo +
                '}';
    }
}
这是Lugar类,元素方法是,我把Lugar=new Lugar();。这一行给了我错误,我不明白为什么

public class Lugares {

    private static LugaresBD lugaresBD;


    protected static List<Lugar> vectorLugares = ejemploLugares();

    public Lugares() {
        vectorLugares = ejemploLugares();
    }

    public static Lugar elemento(int id) {
        Lugar lugar = null;
        SQLiteDatabase bd = lugaresBD.getReadableDatabase();
        Cursor cursor = bd.rawQuery("SELECT * FROM lugares WHERE _id = " + id, null);
        if (cursor.moveToNext()){
            lugar = new Lugar();
            lugar.setNombre(cursor.getString(1));
            lugar.setDireccion(cursor.getString(2));
            lugar.setPosicion((GeoPuntoAlt) new GeoPunto(cursor.getDouble(3), cursor.getDouble(4)));
            lugar.setTipo(TipoLugar.values()[cursor.getInt(5)]);
            lugar.setFoto(cursor.getString(6));
            lugar.setTelefono(cursor.getInt(7));
            lugar.setUrl(cursor.getString(8));
            lugar.setComentario(cursor.getString(9));
            lugar.setFecha(cursor.getLong(10));
            lugar.setValoracion(cursor.getFloat(11));
        }
        cursor.close();
        bd.close();
        return lugar;
    }

    static void anyade(Lugar lugar){
        vectorLugares.add(lugar);
    }

    final static String TAG = "MisLugares";
    protected static GeoPunto posicionActual = new GeoPunto(0,0);

    static int nuevo(){
        Lugar lugar = new Lugar("1Escuela Politécnica Superior de Gandía",
                "C/ Paranimf, 1 46730 Gandia (SPAIN)", -0.166093, 38.995656, 1500,
                TipoLugar.EDUCACION,962849300, "http://www.epsg.upv.es",
                "Uno de los mejores lugares para formarse.", 3);
        vectorLugares.add(lugar);
        return vectorLugares.size()-1;
    }

    static void borrar(int id){
        vectorLugares.remove(id);
    }

    public static int size() {
        return vectorLugares.size();
    }

    public static ArrayList<Lugar> ejemploLugares() {
        ArrayList<Lugar> lugares = new ArrayList<Lugar>();
        lugares.add(new Lugar("Escuela Politécnica Superior de Gandía",
                "C/ Paranimf, 1 46730 Gandia (SPAIN)", -0.166093, 38.995656, 800,
                TipoLugar.EDUCACION,962849300, "http://www.epsg.upv.es",
                "Uno de los mejores lugares para formarse.", 3));

        lugares.add(new Lugar("Al de siempre",
                "P.Industrial Junto Molí Nou - 46722, Benifla (Valencia)",
                -0.190642, 38.925857, 150, TipoLugar.BAR, 636472405, "",
                "No te pierdas el arroz en calabaza.", 3));

        lugares.add(new Lugar("androidcurso.com",
                "ciberespacio", 0.0, 0.0, 2000, TipoLugar.EDUCACION,
                962849300, "http://androidcurso.com",
                "Amplia tus conocimientos sobre Android.", 5));

        lugares.add(new Lugar("Barranco del Infierno",
                "Vía Verde del río Serpis. Villalonga (Valencia)",
                -0.295058, 38.867180, 000, TipoLugar.NATURALEZA,

                0, "http://sosegaos.blogspot.com.es/2009/02/lorcha-villalonga-via-verde-del-rio.html",
                "Espectacular ruta para bici o andar", 4));

        lugares.add(new Lugar("La Vital",
                "Avda. de La Vital, 0 46701 Gandía (Valencia)",
                -0.1720092, 38.9705949, 400, TipoLugar.COMPRAS,
                962881070, "http://www.lavital.es/",
                "El típico centro comercial", 2));

        return lugares;

    }

    static List listaNombres(){
        ArrayList resultado = new ArrayList();
        for (Lugar lugar:vectorLugares){
            resultado.add(lugar.getNombre());
        }
        return resultado;
    }

    public static void indicializaBD(Context contexto){
        lugaresBD = new LugaresBD(contexto);
    }

    public static Cursor listado() {
        SQLiteDatabase bd = lugaresBD.getReadableDatabase();
        return bd.rawQuery("SELECT * FROM lugares", null);
    }
}
public-class-lugars{
私人静态LugaresBD LugaresBD;
受保护的静态列表向量lugares=ejempolugares();
公共雪茄(){
vectorLugares=eJompolugares();
}
公共静态Lugar元素(内部id){
Lugar-Lugar=null;
SQLiteDatabase bd=lugaresBD.getReadableDatabase();
Cursor Cursor=bd.rawQuery(“从lugares中选择*,其中_id=“+id,null”);
if(cursor.moveToNext()){
lugar=新lugar();
lugar.setNombre(cursor.getString(1));
setDireccion(cursor.getString(2));
lugar.setPosicion((GeoPuntoAlt)newgeoponto(cursor.getDouble(3),cursor.getDouble(4));
lugar.setTipo(TipoLugar.values()[cursor.getInt(5)];
setFoto(cursor.getString(6));
lugar.setTelefono(cursor.getInt(7));
setUrl(cursor.getString(8));
setComentario(cursor.getString(9));
lugar.setFecha(cursor.getLong(10));
lugar.setValoracion(cursor.getFloat(11));
}
cursor.close();
bd.close();
返回卢格;
}
静态void anyade(Lugar-Lugar){
矢量lugares.add(lugar);
}
最终静态字符串标签=“MisLugares”;
受保护静态GeoToTo posicionActual=新GeoTo(0,0);
静态int-nuevo(){
卢格·卢格=新卢格(“甘迪亚高级政治学院”,
“国际货币基金组织,146730甘迪亚(西班牙)”,-0.166093,38.99561500,
TipoLugar.EDUCACION,962849300,“http://www.epsg.upv.es",
“形式上的雪茄”,3);
矢量lugares.add(lugar);
返回向量lugares.size()-1;
}
静态void borrar(int-id){
向量lugares.remove(id);
}
公共静态整型大小(){
返回向量lugares.size();
}
公共静态ArrayList eJompolugares(){
ArrayList lugares=新的ArrayList();
lugares.add(新Lugar(“甘迪亚高级政治学院”),
“国际货币基金组织,146730甘迪亚(西班牙)”,-0.166093,38.9956800,
TipoLugar.EDUCACION,962849300,“http://www.epsg.upv.es",
“形式上的雪茄”,3);
lugares.添加(新Lugar(“Al de siempre”),
“P.Industrial Junto MolíNou-46722,贝尼弗拉(巴伦西亚)”,
-0.190642,38.925857,150,蒂波卢加巴尔,636472405,“,
“在卡拉巴扎没有皮耶达斯·阿罗兹。”,3);
添加(新的Lugar(“androidcurso.com”),
“ciberespacio”,0.0,0.0,2000,TipoLugar.EDUCACION,
962849300, "http://androidcurso.com",
“conocimientos sobre安卓体的振幅。”,5);
lugares.add(新Lugar(“Barranco del Infierno”),
“维亚维德·德尔里奥塞尔皮斯·维拉隆加(巴伦西亚)”,
-0.295058,38.867180000,TipoLugar.NATURALEZA,
0, "http://sosegaos.blogspot.com.es/2009/02/lorcha-villalonga-via-verde-del-rio.html",
“特别是比西和安达尔的露塔”,4);
lugares.添加(新Lugar(“La Vital”,
“Avda.de La Vital,0 46701甘迪亚(巴伦西亚)”,
-0.1720092,38.9705949400,蒂波卢加省,
962881070, "http://www.lavital.es/",
“El típico centro Commercial”,2);
返羽;
}
静态列表listaNombres(){
ArrayList resultado=新的ArrayList();
用于(卢格卢格:矢量卢格){
resultado.add(lugar.getNombre());
}
返回resultado;
}
已指示的公共静态无效(上下文上下文){
lugaresBD=新的lugaresBD(contexto);
}
公共静态游标listado(){
SQLiteDatabase bd=lugaresBD.getReadableDatabase();
返回bd.rawQuery(“从lugares选择*项”,空);
}
}
示例错误如下所示:

Lugar中的Lugar()不能应用于:

非常感谢你的帮助,我学到了很多。

自从你

public Lugar(String nombre, String direccion, double longitud,
             double latitud, double altura, TipoLugar tipo,  int telefono, String url, String comentario,
             int valoracion) 
在您的
Lugar
类中,默认构造函数将不可用

您需要始终使用上述构造函数或定义空构造函数

public Lugar() {
}

阅读更多

非常感谢Mithun的回复。我定义了一个空构造函数,错误消失了。但是,当您在listview中按下一项时,应用程序将关闭。@Natlum您可以发布一个单独的问题,其中包含您的
listview
最新实现的
Listener
Adapter
,等等。我提出了另一个问题,因为我认为它与主要问题相关。