无法从数据库中检索数据,以完成列表视图
Posted
技术标签:
【中文标题】无法从数据库中检索数据,以完成列表视图【英文标题】:Failed to retrieve data from a database, to complete a listview 【发布时间】:2015-08-05 14:36:51 【问题描述】:我正在使用数据库来完成列表视图。但是我遇到了一个没有解决的问题。 当我创建一个 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 类,其中 Element 方法是我输入的 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);
示例错误如下:
Lugar 中的 Lugar() 不能应用于:
非常感谢你的帮助,我学到了很多东西。
【问题讨论】:
【参考方案1】:因为你有
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()
阅读更多here
【讨论】:
非常感谢 Mithun 的回复。我定义了一个空的构造函数,错误消失了。但是,当您按下列表视图中的某个项目时,应用程序将关闭。 我提出了另一个问题,因为我认为它与主要问题有关。以上是关于无法从数据库中检索数据,以完成列表视图的主要内容,如果未能解决你的问题,请参考以下文章
android - 在更改 EditText 值时无法更新列表视图
如何在我的 for 循环之外执行代码(需要等到循环完成从 Firebase 数据库中检索数据)?