2014-11-10 4 views
0

텍스트 백업을 위해 안드로이드에 sqlite 데이터베이스를 만들려고합니다. 이것은 sqlite 데이터베이스로 작업 한 첫 번째 시간이므로 멍청한 반응을 보입니다. 그것은 내 SQLite 데이터베이스 내 주요 활동안드로이드 SQLite 데이터베이스 충돌

SimpleCursorAdapter adapter; 
private smsDatabase db1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 





} 

public void Backup(View view) { 

    Uri convo = Uri.parse("content://sms"); 
    String[] reqCol = new String[] {"_id", "thread_id", "address", "person", "date", "body", "type"}; 
    ContentResolver contentResolver = getContentResolver(); 
    Cursor c = contentResolver.query(convo, null, null, null, "date asc"); 
    SMSList<SMS> smsList = new SMSList<SMS>(); 
    String count = Integer.toString(c.getCount()); 
    Log.d("Count",count); 
    Context ctx = getApplicationContext(); 
    db1 = new smsDatabase(ctx); 
    db1.open(); 
    while (c.moveToNext()) { 
     SMS txt = new SMS(); 

     long dateLong = c.getLong(c.getColumnIndex("date")); 
     Integer id1 = c.getInt(c.getColumnIndex("_id")); 
     String body = c.getString(c.getColumnIndex("body")); 
     Integer type1 = c.getInt(c.getColumnIndex("type")); 
     String address1 = c.getString(c.getColumnIndex("address")); 
     String read1 = c.getString(c.getColumnIndex("read")); 
     String seen1 = c.getString(c.getColumnIndex("seen")); 
     String subject1 = c.getString(c.getColumnIndex("subject")); 
     smsList.add(txt); 

     db1.insertSMS(txt); 

    } 
} 

의 코드와 코드가 데이터베이스를 열 tyring 때 충돌 및 로그 여기

java.lang.IllegalStateException: Could not execute method of the activity 
      at android.view.View$1.onClick(View.java:3591) 
      at android.view.View.performClick(View.java:4084) 
      at android.view.View$PerformClick.run(View.java:16966) 
      at android.os.Handler.handleCallback(Handler.java:615) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at android.view.View$1.onClick(View.java:3586) 
            at android.view.View.performClick(View.java:4084) 
            at android.view.View$PerformClick.run(View.java:16966) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4745) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IllegalArgumentException: Version must be >= 1, was -1669636 
      at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:100) 
      at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:78) 
      at com.swavey.testing.smsDatabase$DatabaseHelper.<init>(smsDatabase.java:115) 
      at com.swavey.testing.smsDatabase.<init>(smsDatabase.java:82) 
      at com.swavey.testing.MainActivity.Backup(MainActivity.java:44) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3586) 
            at android.view.View.performClick(View.java:4084) 
            at android.view.View$PerformClick.run(View.java:16966) 
            at android.os.Handler.handleCallback(Handler.java:615) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4745) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
            at dalvik.system.NativeStart.main(Native Method) 

에 이러한 오류가 발생합니다

package com.swavey.testing; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.provider.BaseColumns; 
import android.security.KeyChain; 

import java.util.Date; 

/** 
* Created by Adrian on 11/5/2014. 
*/ 
public class smsDatabase { 

    private static final String KEY_ID = "_id"; 
    private static final int COLUMN_ID =0; 

    // database info 
    public static final String DATABASE_NAME = "texts"; 
    public static final String DATABASE_TABLE = "mainTable"; 
    public static final int DATABASE_VERSION = (int) new Date().getTime()/1000; 

    // list of fields 
    private static final String KEY_ADDRESS = "address"; 
    private static final String KEY_BODY = "body"; 
    private static final String KEY_DATE = "date"; 
    private static final String KEY_DATESENT = "dateSent"; 
    private static final String KEY_READ = "read"; 
    private static final String KEY_SUBJECT = "subject"; 
    private static final String KEY_THREADID = "thread_id"; 
    private static final String KEY_PERSON = "person"; 
    private static final String KEY_PROTOCOL = "protocol"; 
    private static final String KEY_TYPE = "type"; 
    private static final String KEY_SERVICECENTER = "serviceCenter"; 

    //list of field numbers 
    private static final int COL_ADDRESS = 1; 
    private static final int COL_BODY = 2; 
    private static final int COL_DATE = 3; 
    private static final int COL_DATESENT = 4; 
    private static final int COL_READ = 5; 
    private static final int COL_SUBJECT = 6; 
    private static final int COL_THREADID = 7; 
    private static final int COL_PERSON = 8; 
    private static final int COL_PROTOCOL = 9; 
    private static final int COL_TYPE = 10; 
    private static final int COL_SERVICECENTER = 11; 

    //create string array of all fields; 
    public static final String[] ALL_KEYS = new String[] {KEY_ID, KEY_ADDRESS, KEY_BODY, KEY_DATE, 
     KEY_DATESENT, KEY_PERSON, KEY_PROTOCOL,KEY_READ, KEY_SERVICECENTER, KEY_SUBJECT, 
     KEY_THREADID, KEY_TYPE}; 


    private static final String DATABASE_CREATE_SQL = "create table " + DATABASE_TABLE 
      + " (" + KEY_ID + " integer primary key autoincrement, " 
      +KEY_ADDRESS + " text not null, " 
      +KEY_BODY + " text not null, " 
      +KEY_DATE + " text not null, " 
      +KEY_DATE + " text not null, " 
      +KEY_PERSON+ " text not null, " 
      +KEY_PROTOCOL+ " text not null, " 
      +KEY_READ+ " text not null, " 
      +KEY_PERSON + " text not null, " 
      +KEY_PROTOCOL+ " text not null, " 
      +KEY_READ+ " text not null, " 
      +KEY_SERVICECENTER+ " text not null, " 
      +KEY_SUBJECT+ " text not null, " 
      +KEY_THREADID+ " text not null, " 
      +KEY_TYPE+ " text not null" 
      + ");"; 

    private final Context context; 

    private DatabaseHelper dbHelper; 
    private SQLiteDatabase db; 

    public smsDatabase (Context cxt) { 
     this.context = cxt; 
     dbHelper = new DatabaseHelper(context); 
    } 

    //open database 
    public smsDatabase open() { 
     db = dbHelper.getWritableDatabase(); 
     return this; 
    } 
    //close database 
    public void close() { 
     dbHelper.close(); 
    } 

    // insert sms into table 
    public long insertSMS (SMS sms) { 
     ContentValues iv = new ContentValues(); 
     iv.put(KEY_ADDRESS, sms.getAddress()); 
     iv.put(KEY_BODY, sms.getBody()); 
     iv.put(KEY_DATE, sms.getDate()); 
     iv.put(KEY_DATESENT, sms.getDateSent()); 
     iv.put(KEY_PERSON, sms.getPerson()); 
     iv.put(KEY_PROTOCOL, sms.getProtocol()); 
     iv.put(KEY_READ, sms.getRead()); 
     iv.put(KEY_SERVICECENTER, sms.getServiceCenter()); 
     iv.put(KEY_SUBJECT, sms.getSubject()); 
     iv.put(KEY_THREADID, sms.getThread_id()); 
     iv.put(KEY_TYPE, sms.getType()); 

     return db.insert(DATABASE_TABLE, null,iv); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     public void onCreate(SQLiteDatabase _db) { 
      _db.execSQL(DATABASE_CREATE_SQL); 
     } 


     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
      _db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_TABLE); 
      onCreate(_db); 
     } 
    } 
} 
+0

스택 트레이스가 당신을 알려줍니다 추가 세미콜론이 보인다 com.swavey.testing.MainActivity.Backup (MainActivity.java:42). 어떤 객체가 null인지 디버깅 해 봤나? 내 생각 엔 db1 결코 인스턴스화/초기화 된 것입니다. – Jack

+0

나는 그것을 고쳤다. 이제 여전히 오류가 발생합니다. 데이터베이스 도우미 클래스에서 잘못된 것 같다. –

답변

0

첫 번째는 db1을 초기화하지 않은 것을 볼 수 있습니다.이 오류를 수정하면 더 많이 볼 수 있습니다.

public void Backup(View view) { 

    Uri convo = Uri.parse("content://sms"); 
    String[] reqCol = new String[] {"_id", "thread_id", "address", "person", "date", "body", "type"}; 
    ContentResolver contentResolver = getContentResolver(); 
    Cursor c = contentResolver.query(convo, null, null, null, "date asc"); 
    SMSList<SMS> smsList = new SMSList<SMS>(); 
    String count = Integer.toString(c.getCount()); 
    Log.d("Count",count); 
    db1.open();**//this is null** 

.

0

이 또는 완전히 문제가 해결되지 않을 수도 있습니다,하지만 당신은 당신이 라인 (42)에 null 객체의 속성이나 메서드에 액세스하려고하는 것을

private static final String DATABASE_CREATE_SQL = "create table " + DATABASE_TABLE 
      + " (" + KEY_ID + " integer primary key autoincrement, " 
      +KEY_ADDRESS + " text not null, " 
      +KEY_BODY + " text not null, " 
      +KEY_DATE + " text not null, " 
      +KEY_DATE + " text not null, " 
      +KEY_PERSON+ " text not null, " 
      +KEY_PROTOCOL+ " text not null, " 
      +KEY_READ+ " text not null, " 
      +KEY_PERSON + " text not null, " 
      +KEY_PROTOCOL+ " text not null, " 
      +KEY_READ+ " text not null, " 
      +KEY_SERVICECENTER+ " text not null, " 
      +KEY_SUBJECT+ " text not null, " 
      +KEY_THREADID+ " text not null, " 
      +KEY_TYPE+ " text not null" 
      + ");"; 
       ^take this out 
관련 문제