Android SQLite数据库中的ListView错误
我有个问题,不知道该怎么办。我试图从SQLite数据库创建ListView,但应用程序在数据库中导致错误。我试过几种方法,但都不管用。需要注意的一点是,该应用程序在我的智能手机(Android 4.4.4)上运行良好,但在该版本的其他不同版本中会出现错误。 如果您能将此信息发送给我,我将不胜感激 LogCatAndroid SQLite数据库中的ListView错误,android,sqlite,android-listview,populate,Android,Sqlite,Android Listview,Populate,我有个问题,不知道该怎么办。我试图从SQLite数据库创建ListView,但应用程序在数据库中导致错误。我试过几种方法,但都不管用。需要注意的一点是,该应用程序在我的智能手机(Android 4.4.4)上运行良好,但在该版本的其他不同版本中会出现错误。 如果您能将此信息发送给我,我将不胜感激 LogCat 12-11 09:16:41.860: W/EGL_emulation(1101): eglSurfaceAttrib not implemented 12-11 09:16:47.280
12-11 09:16:41.860: W/EGL_emulation(1101): eglSurfaceAttrib not implemented
12-11 09:16:47.280: E/SQLiteLog(1101): (1) no such table: medidas
12-11 09:16:47.290: D/AndroidRuntime(1101): Shutting down VM
12-11 09:16:47.310: W/dalvikvm(1101): threadid=1: thread exiting with uncaught exception (group=0xb1a8bba8)
12-11 09:16:47.450: E/AndroidRuntime(1101): FATAL EXCEPTION: main
12-11 09:16:47.450: E/AndroidRuntime(1101): Process: com.bodyevolution, PID: 1101
12-11 09:16:47.450: E/AndroidRuntime(1101): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.bodyevolution/com.bodyevolution.ConsultarMedidasActivity}: android.database.sqlite.SQLiteException: no such table: medidas (code 1): , while compiling: SELECT * FROM medidas WHERE id_usuario = ?
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.os.Handler.dispatchMessage(Handler.java:102)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.os.Looper.loop(Looper.java:136)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread.main(ActivityThread.java:5017)
12-11 09:16:47.450: E/AndroidRuntime(1101): at java.lang.reflect.Method.invokeNative(Native Method)
12-11 09:16:47.450: E/AndroidRuntime(1101): at java.lang.reflect.Method.invoke(Method.java:515)
12-11 09:16:47.450: E/AndroidRuntime(1101): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-11 09:16:47.450: E/AndroidRuntime(1101): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-11 09:16:47.450: E/AndroidRuntime(1101): at dalvik.system.NativeStart.main(Native Method)
12-11 09:16:47.450: E/AndroidRuntime(1101): Caused by: android.database.sqlite.SQLiteException: no such table: medidas (code 1): , while compiling: SELECT * FROM medidas WHERE id_usuario = ?
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
12-11 09:16:47.450: E/AndroidRuntime(1101): at com.bodyevolution.usuario.persistencia.UsuarioDAO.findMedidasById(UsuarioDAO.java:101)
12-11 09:16:47.450: E/AndroidRuntime(1101): at com.bodyevolution.usuario.negocio.UsuarioBusiness.datasMedidas(UsuarioBusiness.java:70)
12-11 09:16:47.450: E/AndroidRuntime(1101): at com.bodyevolution.ConsultarMedidasActivity.<init>(ConsultarMedidasActivity.java:15)
12-11 09:16:47.450: E/AndroidRuntime(1101): at java.lang.Class.newInstanceImpl(Native Method)
12-11 09:16:47.450: E/AndroidRuntime(1101): at java.lang.Class.newInstance(Class.java:1208)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
12-11 09:16:47.450: E/AndroidRuntime(1101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
12-11 09:16:47.450: E/AndroidRuntime(1101): ... 11 more
将信息返回ListView的方法
public List<Medidas> findMedidasById(int id){
List<Medidas> medidas = new ArrayList<Medidas>();
String sql = "SELECT * FROM " + this.getMEDIDAS() + " WHERE id_usuario = ?";
String[] selectionArgs = new String[] { "" + id };
Cursor cursor = bancodedados.rawQuery(sql, selectionArgs);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
medidas.add(montaMedidas(cursor));
cursor.moveToNext();
}
return medidas;
}
public Medidas montaMedidas(Cursor cursor) {
if (cursor.getCount() == 0) {
return null;
}
Double bracos = cursor.getDouble(cursor.getColumnIndex("bracos"));
Double peitoral = cursor.getDouble(cursor.getColumnIndex("peitoral"));
Double coxas = cursor.getDouble(cursor.getColumnIndex("coxas"));
Double costas = cursor.getDouble(cursor.getColumnIndex("costas"));
Double panturrilha = cursor.getDouble(cursor
.getColumnIndex("panturrilhas"));
Double trapezio = cursor.getDouble(cursor.getColumnIndex("trapezio"));
Double antebracos = cursor.getDouble(cursor
.getColumnIndex("antebracos"));
Double cintura = cursor.getDouble(cursor.getColumnIndex("cintura"));
Double peso = cursor.getDouble(cursor.getColumnIndex("peso"));
Double altura = cursor.getDouble(cursor.getColumnIndex("altura"));
String data = cursor.getString(cursor.getColumnIndex("data"));
Medidas medidas = new Medidas();
medidas.setBracos(bracos);
medidas.setPeitoral(peitoral);
medidas.setCoxas(coxas);
medidas.setCostas(costas);
medidas.setPanturrilha(panturrilha);
medidas.setTrapezio(trapezio);
medidas.setAntebracos(antebracos);
medidas.setCintura(cintura);
medidas.setPeso(peso);
medidas.setAltura(altura);
medidas.setData(data);
return medidas;
}
公共列表findMedidasById(int-id){
List medidas=new ArrayList();
String sql=“SELECT*FROM”+this.getMEDIDAS()+“其中id_usuario=?”;
字符串[]selectionArgs=新字符串[]{“+id};
Cursor Cursor=bancodedados.rawQuery(sql,selectionArgs);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
添加(montaMedidas(游标));
cursor.moveToNext();
}
返回medidas;
}
公共医疗机构montaMedidas(光标){
if(cursor.getCount()==0){
返回null;
}
Double-bracos=cursor.getDouble(cursor.getColumnIndex(“bracos”));
Double-peitoral=cursor.getDouble(cursor.getColumnIndex(“peitoral”);
Double-coxas=cursor.getDouble(cursor.getColumnIndex(“coxas”);
Double costas=cursor.getDouble(cursor.getColumnIndex(“costas”);
Double panturrilha=cursor.getDouble(cursor
.getColumnIndex(“panturrilhas”);
Double-梯形图=cursor.getDouble(cursor.getColumnIndex(“梯形图”));
Double antebracos=cursor.getDouble(cursor
.getColumnIndex(“antebracos”);
Double-cintura=cursor.getDouble(cursor.getColumnIndex(“cintura”);
Double比索=cursor.getDouble(cursor.getColumnIndex(“比索”));
Double altura=cursor.getDouble(cursor.getColumnIndex(“altura”);
字符串数据=cursor.getString(cursor.getColumnIndex(“数据”));
Medidas Medidas=新Medidas();
麦迪达斯·塞布拉科斯(bracos);
梅迪达斯。塞特佩特拉尔(佩特拉尔);
梅迪达斯·塞科克斯(coxas);
梅迪达斯·塞科斯塔斯(costas);
梅迪达斯·塞潘图里哈(潘图里哈);
medidas.Set梯形图(梯形图);
梅迪达斯.塞坦特布拉科斯(antebracos);
梅迪达斯·塞奇图拉(cintura);
梅迪达斯·塞特比索(比索);
梅迪达斯·塞塔图拉(阿尔图拉);
medidas.setData(数据);
返回medidas;
}
活动代码
package com.bodyevolution.bd;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BD extends SQLiteOpenHelper {
private final static int VERSAO = 1;
private final static String NOME = "bodyevolution.sqlite";
private static final String CREATE_USUARIO = "CREATE TABLE IF NOT EXISTS usuario ("
+ "id INTEGER PRIMARY KEY, "
+ "username VARCHAR( 20 ) NOT NULL, "
+ "senha VARCHAR( 6 ) NOT NULL, "
+ "nome VARCHAR ( 20 ) NOT NULL, "
+ "sexo VARCHAR ( 10 ), "
+ "data VARCHAR ( 10 ));";
private static final String CREATE_MEDIDAS = "CREATE TABLE IF NOT EXISTS medidas ("
+ "id INTEGER PRIMARY KEY, "
+ "id_usuario INTEGER, "
+ "data VARCHAR (10), "
+ "bracos DECIMAL(2,1), "
+ "peitoral DECIMAL(2,1), "
+ "coxas DECIMAL(2,1), "
+ "costas DECIMAL(2,1), "
+ "panturrilhas DECIMAL(2,1), "
+ "trapezio DECIMAL(2,1), "
+ "antebracos DECIMAL(2,1), "
+ "cintura DECIMAL(2,1), "
+ "peso DECIMAL(2,1), "
+ "altura DECIMAL(1,2));";
private static final String CREATE_TREINO = "";
private static final String CREATE_EXERCICIO = "";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_USUARIO);
db.execSQL(CREATE_MEDIDAS);
}
public BD(Context context) {
super(context, NOME, null, VERSAO);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CREATE_USUARIO);
db.execSQL("DROP TABLE IF EXISTS " + CREATE_MEDIDAS);
onCreate(db);
}
}
package com.bodyevolution;
import java.util.ArrayList;
import java.util.List;
import com.bodyevolution.usuario.dominio.Medidas;
import com.bodyevolution.usuario.negocio.UsuarioBusiness;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ConsultarMedidasActivity extends Activity {
UsuarioBusiness usuarioBusiness = new UsuarioBusiness();
List<Medidas> retornaListaMedidas = usuarioBusiness.datasMedidas();
List<String> datas = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_consultar_medidas);
for (Medidas m : retornaListaMedidas) {
datas.add(m.getData());
}
ListView lista = (ListView) findViewById(R.id.listDatasMedidas);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, datas);
lista.setAdapter(adapter);
}
}
package com.bodyevolution;
导入java.util.ArrayList;
导入java.util.List;
导入com.bodyevolution.usuario.dominio.Medidas;
导入com.bodyevolution.usuario.negocio.usuario业务;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类顾问MedidaSactivity扩展活动{
UsuarioBusiness UsuarioBusiness=新的UsuarioBusiness();
List retronalistamedidas=usuarioBusiness.datasMedidas();
列表数据=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u consultar\u medidas);
对于(Medidas m:RetronalistaMedidas){
add(m.getData());
}
ListView lista=(ListView)findViewById(R.id.listDatasMedidas);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,数据);
setAdapter(适配器);
}
}
引发的异常为
原因:android.database.sqlite.SQLiteException:无此表:
medidas(代码1):,编译时:从medidas中选择*,其中
id_usuario=
因此,您的“medidas”表不存在。因此,请确认调用了onCreate
,并且调用了db.execSQL(CREATE\u MEDIDAS)代码>
此外:
db.execSQL("DROP TABLE IF EXISTS " + CREATE_USUARIO);
db.execSQL("DROP TABLE IF EXISTS " + CREATE_MEDIDAS);
它应该是表的名称,而不是整个create语句
另外请注意,SQLite没有十进制,它将是一个真正的
,那么当您遍历代码时会发生什么呢?特别是在DB.onCreate?谢谢你的回答。我做了你告诉我的所有更改,但仍然是相同的错误。