SQLite Android, SQliteOpenHelper .

0

Witam,
mam problem z SQLitem, nie mogłem znaleźć na forum. Jeżeli było to przepraszam.

Do rzeczy!

Mam klase do obsługi bd:

public class bazaActivities extends SQLiteOpenHelper {

    public bazaActivities(Context context) {
        super(context,"activities.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {


        db.execSQL("create table activity("
                +"nr integer primary key autoincrement,"
                +"rodzaj text,"
                +"intensywnosc text,"
                +"czas text,"
                +"kalorie text);");

        Log.v("Oncreate","SQLite base created!!");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }

    public void addActivity(String rodzaj, String intensywnosc,String czas, String kalorie){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("rodzaj",rodzaj);
        values.put("intensywnosc",intensywnosc);
        values.put("czas",czas);
        values.put("kalorie",kalorie);
        db.insertOrThrow("activity",null,values);
        Log.v("AddActivity","SQLite activity added");

    }

    public Cursor getAll (){
        String[] kolumns = {"rodzaj","intensywnosc","czas","kalorie","nr"};
        SQLiteDatabase database = getReadableDatabase();
        Cursor cursor = database.query("activity",kolumns,null,null,null,null,null);
        return cursor;
    }

    public void deleteRow(int id){
        SQLiteDatabase db = this.getWritableDatabase();
        String[] argumenty = {""+id};
        db.delete("activity", "nr=?", argumenty);
    }

}

oraz wywołuję ją we Fragmencie w metodzie "onCreateView":

bazaActivities baza;
    Cursor cursor;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_activities, container, false);
        Log.v("logtest","Performed");
        ////array data
        baza = new bazaActivities(getActivity());
        baza.addActivity("running","high","20","500");
        activityArray = new ArrayList<>();

        cursor = baza.getAll();
        if(cursor==null) {
            cursor.moveToFirst();
            do {
                activityArray.add(cursor.getString(0));
            } while (cursor.moveToNext());
        }activityArray.add("error");

dodam że jak testowałem SQLite w innej aplikacji wszystko raczej działało, nie mam pojęcia w czym jest problem.

Docelowo dodaję do bazy danych nowe rekordy z poziomu Innego activity "linijka baza.addActivity("running","high","20","500"); tylko w celach demonstracyjnych (o ile ta informacja ma jakiekolwiek znaczenie)."

0

My tez nie wiemy w czym problem bo go nie oposales.

0

Sorki, niedopisałem. Baza w ogóle nie reaguje. Metoda add nie dodaje rekordu, ba sama baza danych się nie chce stworzyć.

1

A pokaż jak to wywołujesz z innego activiti. Przy okazji z tego co ja pamiętam i tak jak to robiłem to SQLiteOpenHelper jak Singelton się powinno używać, bo przecież nie tworzysz nowych isntancji istniejącej bazy no nie ? :)

Przy okazji, a zapinałeś się debugerem żeby sprawdzić czy w ogóle używa danej metody?

0

Wrzuć log z kompilacji aplikacji.

[Mateusz]

1

Nie polecam korzystania z tego co standardowo zapewnia android (o ile dobrze nie znasz sqla).
Użyj tego: http://satyan.github.io/sugar/
Bardzo prosta obsługa i tworzenie bazy danych.

1

nie zawsze jest sens dokładać ciężkiego ORM-a do projektu. Jezeli jest to baz gdzie jest 100 rekordów i 1 tabela to nie ma sensu. Mi się tak wydaje

0

A masz gdzieś w ogóle wywołane open() ? Bo nie widzę...

0

Dzięki wszystkim za odpowiedź, udało mi się (metodą prób i błędów) znaleźć rozwiązanie. Klasa z bazą danych była w innym folderze. Teraz wszystko działa. Dzięki za podpowiedzi, związane z bazami danych, SKORZYSTAM :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1