Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite数据库中的ListView错误_Android_Sqlite_Android Listview_Populate - Fatal编程技术网

Android SQLite数据库中的ListView错误

Android 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

我有个问题,不知道该怎么办。我试图从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: 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?谢谢你的回答。我做了你告诉我的所有更改,但仍然是相同的错误。