2013-12-13 2 views
0

Итак, когда я запускаю приложение, я получаю фатальное исключение, говорящее, что пустого конструктора нет. Затем, когда я добавляю пустой конструктор, он дает мне, что «Ошибка конструктора SQLiteOpenHelper() не определена».Конструктор SQLiteOpenHelper() не определен

Это мое первое приложение, так что я понятия не имею, что делать.

Вот код:

package com.example.lightalarmclock; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.os.Bundle; 

public class writeAlarm extends Activity { 

    public static final String PREFS = "positions"; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 
    private DbHelper ourHelper; 

    private static String pos1 = "0"; 
    private static String pos2 = "0"; 
    private static String pos3 = "0"; 
    private static String pos4 = "0"; 
    private static String timeSet; 

    private static int rep1 = 0; 
    private static int rep2 = 0; 
    private static int rep3 = 0; 
    private static int rep4 = 0; 
    private static int rep5 = 0; 
    private static int rep6 = 0; 
    private static int rep7 = 0; 
    private static int repB; 
    private static int repSet; 

    private static final String DATABASE_NAME = "alarmDB"; 
    private static final String DATABASE_TABLE = "alarmStack"; 
    private static final int DATABASE_VERSION = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    public void updateVars() { 
     SharedPreferences positions = getSharedPreferences(PREFS, 0); 
     //TODO import from sharedPreferences to local vars 
    } 

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

     public DbHelper() { 
      super(); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      //writing to database 
      if (rep1 >= 0 || rep2 >= 0 || rep3 >= 0 || rep4 >= 0 || rep5 >= 0 || rep6 >= 0 || rep7 >= 0) { 
       repB = 1; 
      } 
      else { 
       repB = 0; 
      } 

      //setting time 
      timeSet= pos4+pos3+":"+pos2+pos1; 

      //Writing 
      db.execSQL 
      ("INSERT INTO TABLE alarmDB.alarmStack(alarm_time, alarm_repeat, rep1, rep2, rep3, rep4, rep5, rep6, rep7) " + 
       "VALUES (" + timeSet + ", " + repB + ", "+ rep1 +", "+ rep2 +", "+ rep3 +", "+ rep4 +", "+ rep5 +", "+ rep6 +", "+ rep7 +")"); 

      //launch backToMain 
      backToMain(null); 
     } 

     public static void backToMain(Context ctx) { 
      // do some stuff here 
      ctx.startActivity(new Intent(ctx, MainActivity.class)); 
     } 

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

    public void backToMain() { 
     Intent j = new Intent(writeAlarm.this, MainActivity.class); 
     startActivity(j); 
    } 

    public writeAlarm (Context c) { 
     ourContext = c; 
    } 

    public writeAlarm open() { 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     ourHelper.close(); 
    } 
} 
+0

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html, нет конструктора по умолчанию. – natez0r

+0

@ natez0r как я писал в начале, когда я удаляю конструкцию, я получаю ошибку времени выполнения, говоря «нет пустого конструктора» – user2979816

ответ

3

Для класса DbHelper extends SQLiteOpenHelper вы делаете это:

public DbHelper() { 
    super(); 
} 

Если вы смотрите в Android docs for SQLiteOpenHelper, нет SQLiteOpenHelper() конструктор, так что жаловаться.

+0

Когда вы говорите «нет конструктора SQLiteOpenHelper()», вы говорите, что класс SQLiteOpenHelper имеет вообще никаких конструкторов, или вы говорите, что нет конструкторов, которые принимают нулевые параметры? Потому что, очевидно, для этого класса существуют два конструктора. Не пытаясь быть аргументированным, я просто новый Android Dev, который пытается учиться. – Brian

+0

@Brian Последний. 'super()' пытается вызвать 'SQLiteOpenHelper()', которого не существует. Другой конструктор 'DbHelper (контекст контекста)' работает, потому что он вызывает 'public SQLiteOpenHelper (контекст контекста, имя строки, SQLiteDatabase.CursorFactory factory, int version)', который является допустимым конструктором. –

1

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

Посмотрите на он общественных ocnstrucors и проходит правый Parms

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

Создать вспомогательный объект для создания, открытия и/или управления базой данных.

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)

Создать вспомогательный объект для создания, открытия и/или управления базой данных.

Вам необходимо использовать один из двух вышеуказанных конструкторов. Но у вас есть

public DbHelper() { // remove this 
     super(); 
    } 

У вас уже есть

public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

Edit:

Вы создаете конструктор Activity класса, который является неправильным

public class writeAlarm extends Activity { 

Вы

public writeAlarm (Context c) { 
     ourContext = c; 
    } 

Я хотел бы предложить вам перенести этот

private static class DbHelper extends SQLiteOpenHelper { 

отделить .java файла

+0

Привет, я пытался придерживаться ваших рекомендаций, но теперь я получаю сообщение об ошибке в writeAlarm(): «Конструктор writeAlarm.DbHelper (Context) не определен» – user2979816

+0

@ user2979816 что такое witeAlaram и где у вас есть DbHelper? – Raghunandan

+0

@ user2979816 defintely слишком много проблем для вас, кроме ошибки конструктора. я предлагаю вам сначала прочитать документы о действиях и sqlite перед coidng – Raghunandan

0

Слишком много вещей !!

Удалить это:

public DbHelper() { 
    super(); 
} 

И это:

public writeAlarm (Context c){ 
    ourContext = c; 
} 

В OnCreate поставить это:

ourContext = this; 

В

@Override 
public void onCreate(SQLiteDatabase db) { 

Необходимо создать базу данных.

See this maybe help

0

я м, показывающий один exmample Для SqlLiteHelper

1) Создание класса для sqlitehelper

общественного класса SQLHelper расширяет SQLiteOpenHelper {

public static final String DB_NAME = "myDatabase"; 

public static final String TBL_NAME = "myTable"; 
public static final String COL1 = "ID"; 
public static final String COL2 = "Name"; 
public static final String COL3 = "Mobile"; 

public SQLHelper(Context context) { 
    super(context, DB_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(createTable Query); 
    Log.d("tag", "Succesffull"); 
} 

public void InsertData(String val1,String val2) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(COL2, val1); 
    cv.put(COL3, val2); 
    db.insert(TBL_NAME, COL1, cv); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

}} 

После создания вашего CLA ss после вызова // инициализировать класс SQLHelper

SQLHelper helper;

// Просто передать текущую активность

хелпера = новый SQLHelper (MainActivity.this);

Смежные вопросы