데이터베이스에서 데이터를 가져 오려고하는데 앱을 접을 때 앱이 접습니다.데이터베이스에서 모든 항목을 가져 오려고하면 앱이 붕괴합니다.
내 코드를 확인하고 도움을 요청하십시오. 문제를 해결할 수는 있지만 문제가 무엇인지 찾을 수 없습니다. 나는 (이 기능을 실행하려고하면
공용 클래스 MyPetsOpenHelper는 SQLiteOpenHelper {
public static final String DATABASENAME="pets.db";
public static final String TABLE_MYPETS="tblmypets";
public static final int DATABASEVERSION=1;
public static final String COLUMN_ID="id";
public static final String COLUMN_IMAGE="image";
public static final String COLUMN_NAME="name";
public static final String COLUMN_TASK1="task1";
public static final String COLUMN_TASK2="task2";
public static final String COLUMN_TASK3="task3";
private static final String CREATE_TABLE_MYPETS="CREATE TABLE IF NOT EXISTS " +
TABLE_MYPETS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME + " VARCHAR," + COLUMN_IMAGE + " BLOB,"
+ COLUMN_TASK1 + " VARCHAR," + COLUMN_TASK2 + " VARCHAR," + COLUMN_TASK3 + " VARCHAR" + ");";
String [] allColumns={MyPetsOpenHelper.COLUMN_ID, MyPetsOpenHelper.COLUMN_NAME, MyPetsOpenHelper.COLUMN_IMAGE,
MyPetsOpenHelper.COLUMN_TASK1, MyPetsOpenHelper.COLUMN_TASK2, MyPetsOpenHelper.COLUMN_TASK3};
SQLiteDatabase database;
public MyPetsOpenHelper(Context context)
{
super(context, DATABASENAME, null, DATABASEVERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_MYPETS);
Log.d("data", "Table MyPets is created");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_MYPETS);
onCreate(db);
}
public void open()
{
database=this.getWritableDatabase();
Log.d("data", "database connection open");
}
//QUERIES
public SinglePet createSinglePet(SinglePet s)
{
ContentValues values= new ContentValues();
values.put(COLUMN_NAME, s.getName());
Bitmap b=s.getPhoto();
values.put(COLUMN_IMAGE,PhotoHelper.bitmapToString(b));
values.put(COLUMN_TASK1, s.getTask1());
values.put(COLUMN_TASK2, s.getTask2());
values.put(COLUMN_TASK3, s.getTask3());
long insertId=database.insert(TABLE_MYPETS, null, values);
Log.d("data", "MyPets " + insertId + " insert to database");
s.setId(insertId);
return s;
}
를 확장 :
public class SinglePet {
private String name;
private Bitmap photo;
private String task1;
private String task2;
private String task3;
private long id;
public SinglePet(String name, Bitmap photo, String task1, String task2, String task3, long id) {
this.name = name;
this.photo = photo;
this.task1 = task1;
this.task2 = task2;
this.task3 = task3;
this.id = id;
}
//and getter and setter...
이 내 데이터베이스입니다 : 내가 저장하려고 무엇
getAll()) 앱이 무너집니다 !!!
public ArrayList<SinglePet> getAll()
{
ArrayList<SinglePet> l= new ArrayList<SinglePet>();
Cursor cursor=database.query(MyPetsOpenHelper.TABLE_MYPETS, allColumns, null, null, null, null, null);
if(cursor.getCount()>0)
{
while (cursor.moveToNext())
{
long id= cursor.getLong(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_ID));
String name= cursor.getString(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_NAME));
byte [] image= cursor.getBlob(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_IMAGE));
Bitmap imageB= PhotoHelper.byteArrayTBitmap(image);
String task1= cursor.getString(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_TASK1));
String task2= cursor.getString(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_TASK2));
String task3= cursor.getString(cursor.getColumnIndex(MyPetsOpenHelper.COLUMN_TASK3));
SinglePet s=new SinglePet(name, imageB , task1, task2, task3, id);
l.add(s);
}
}
return l;
// and the rest of the class doesn't matter...
문제는 내가 뭔가를 쓸 때입니다 같은 -
목록 = myPetsOpenHelper.getAll();
앱이 무너졌습니다!
저에게 도와주세요
전체 추적 :
04-14 15 : 46 : 49.913 11231-11231가/com.example.admin.petcare I/데이터 : 목록 크기가 0 04-14 15 : 46 : 49.933 11231-11231/com.example.admin.petcare D/data : 데이터베이스 연결 열기 04-14 15 : 46 : 49.983 11231-11231/com.example.admin.petcare E/SQLiteLog : (1) 테이블 tblmypets에는 task2라는 열이 없습니다. 04-14 15 : 46 : 49.983 11231-11231/com.example.admin.petcare E/SQLiteDatabase : 이미지 삽입 오류 = [B @ a5a2aa38 task1 = 작업 1 task2 = 작업 2 task3 = 작업 3 이름 = 예 android.databa se.sqlite.SQLiteException : 테이블 tblmypets에는 task2 (코드 1)라는 열이 없습니다. 컴파일시 : INSERT INTO tblmypets (image, task1, task2, task3, name) VALUES (?,?,?,?,?) at android.database.sqlite.SQLiteConnection.nativePrepareStatement (네이티브 메소드) and35.pdf (SQLiteConnection.java : 500) android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) android.database.sqlite.SQLiteProgram (SQLiteProgram.java:58) android.database.sqlite.SQLiteStatement에서 (SQLiteStatement.java:31)) android에서 .database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java:1467) android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1339) at com.example.admin.petcare.MyPetsOpenHelper.createSinglePet (MyPetsOpenHelper.java) : 74) at com.example.admin.petcare.MyPetsActivity.examplePet (MyPetsActivity.java:182) at com.example.admin.petcare.MyPetsActivity.onCreate (MyPetsActivity.java:68) android.app.Activity android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2175)에서 android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087) 에서 .performCreate (Activity.java:5133) ,536,913,632 10 android.app.ActivityThread.android.os.Handler에서 android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1256) 에서 android.app.ActivityThread.access $ 600 (ActivityThread.java:141) 에서 handleLaunchActivity (ActivityThread.java:2261) java.lang.reflect.Method에에서 android.app.ActivityThread.main (ActivityThread.java:5103) 에서 android.os.Looper.loop (Looper.java:137) 에서 .dispatchMessage (Handler.java:99) COM에서 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:737) 에서 java.lang.reflect.Method.invoke (Method.java:525) 에서 .invokeNative (기본 방법) .android.internal.os.ZygoteInit.main (ZygoteInit.java:553) at dalvik.system.NativeStart.main (기본 메소드) 04-14 15 : 46 : 49.983 11231-11231/com.example.admin.petcare D/data : MyPets -1 데이터베이스에 삽입 04-14 15 : 46 : 49.993 11231-11231/com.example.admin.petcare D/data : 데이터베이스 연결이 열려 있음 04-14 15 : 46 : 49.993 11231-11231/com.example.admin.petcare E/SQLiteLog : (1) 해당 열 없음 : task2 04-14 15 : 46 : 49.993 11231-11231/com.example.admin.petcare D/AndroidRuntime : VM 종료 중 04-14 (그룹 = 0xa4fdc678) 04-14 15 : 46 : 50.003 11231-11231/com.example .admin.petcare E/AndroidRuntime : 치명적인 예외 : 주 java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.example.admin.petcare/com.example.admin.petcare.MyPetsActivity} : android.database.sqlite.SQLiteException : 해당 열이 없습니다. task2 (code 1) :, 컴파일하는 동안 : android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2261)에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2211)에서 tblmypets FROM SELECT ID, 이름, 이미지, 작업 1, task2, task3 을 android.app.ActivityThread.access $ 600 (ActivityThread.java:141) android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1256) at android.os.Handler.dispatchMessage (Handler.java:99) android.os.Looper.loop (Looper.java:137)의 android.app.ActivityThread.main (ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:525) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) at dalvik.system.NativeStart.main (네이티브 메소드) 원인 : android.database.sqlite.SQLiteException : 해당 열 없음 : task2 (코드 1) : 컴파일 중 : select id, name, image, task1, task2, task3 FROM tblmypets android.database. sqlite.SQLiteConnection.nativePrepareStatement (네이티브 메서드) android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:889) android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:500) android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) android.database.sqlite.SQLiteProgram (SQLiteProgram.java:58) android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) android.database.sqlite.SQLiteDirectCursorDriver. 쿼리 (SQLiteDirectCursorDriver.java:44) android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1314) android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1161) android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1032)에서 android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1032)에서 at com. example.admin.petcare.MyPetsOpenHelper.getAll (MyPetsOpenHelper.java:83) at com.example.admin.petcare.MyPetsActivity.onCreate (MyPetsActivity.java:72) android.app.Activity.performCreate (Activity.java : 5133) android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2175) android.app에 있습니다. android.os에서 android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1256) 에서 android.app.ActivityThread.access $ 600 (ActivityThread.java:141) 에서 ActivityThread.handleLaunchActivity (ActivityThread.java:2261) .Handler.dispatchMessage (Handler.java:99) android.os.Looper.loop (Looper.java:137)의 android.app.ActivityThread.main (ActivityThread.java:5103)의 의 java.lang.reflect에서 .Method.invokeNative (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:525) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) at dalvik.system.NativeStart.main (기본 메소드) 04-14 15 : 46 : 50.013 1460-1460/system_process W/ActivityManager : 강제 종료 활동 com.example.admin.petcare/.MyPetsActivity 04-14 15 : 46 : 50.343 1974-11625/com.google.android.gms D/DropBoxEntryAddedChimeraService : 사용자가 사용하지 않음 사용 & 진단 또는 잠금 함 . 04-14 15 : 46 : 50.523 1460-1477/system_process W/ActivityManager : ActivityRecord에 대한 활동 일시 중지 제한 시간 {a5642da0 u0 com.example.admin.petcare/.MyPetsActivity} 04-14 15 : 46 : 59.723 1460-1477/system_process W/ActivityManager : 시작 시간 초과가 만료되어 잠자기를 포기했습니다! 04-14 15 : 46 : 59.743 1460-1477/system_process W/ActivityManager : ActivityRecord에 대한 활동 유휴 시간 초과 {a5642da0 u0 com.example.admin.petcare/.MyPetsActivity} 04-14 15 : 47 : 00.533 1460-1477/system_process W/ActivityManager : ActivityRecord에 대한 활동 유휴 시간 초과 {a54c27e0 u0 com.example.admin.petcare/.MainActivity} 04-14 15 : 47 : 04.733 1460-1477/system_process W/ProcessStats : 알 수없는 프로세스 건너 뛰기 pid 11730 04- 14 15 : 47 : 09.753 1460-1477/system_process W/ActivityManager : ActivityRecord에 대한 활동 파괴 시간 초과 {a5642da0 u0 com.example.admin.petcare/.MyPetsActivity} 04-14 15 : 48 : 19.403 1460-1477/system_process W/BroadcastQueue : 브로드 캐스트 시간 초과 BroadcastRecord {a572c658 u0 com.google.firebase.INSTANCE_ID_EVENT} - [email protected], 시작 60021ms 전에 04-14 15 : 48 : 19.403 14 60-1477/system_process W/BroadcastQueue : 시간 초과 중 수신자 : ResolveInfo {a572cb00 com.google.firebase.iid.FirebaseInstanceIdInternalReceiver p = 0 o = 0 m = 0x0} 04-14 15 : 48 : 19.433 1460-1477/system_process I/ActivityManager : 충돌하는 앱 충돌 ANR : ProcessRecord {a5637df0 11231 : com.example.admin.petcare/u0a10050} 인 텐트 공개 {act = com.google.firebase.INSTANCE_ID_EVENT flg = 0x14 cmp = com.example.admin.petcare/com .google.firebase.iid.FirebaseInstanceIdInternalReceiver (부가 기능)}
콜 스택 작성 – Vyacheslav
크래시 로그를 게시하십시오 –
내 게시물을 편집했습니다. – Meow