Soru & Cevap

fragment ile database ...

01.01.2015 - 08:32

[code]

public class Bildirimler extends Fragment implements OnClickListener {

    TextView bildirim, icerik;
    Button icerikGetir;
    private Veritabani db;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.bildirimler_fragment, container,
                false);

        bildirim = (TextView) getActivity().findViewById(R.id.tvBildirim);
        icerik = (TextView) getActivity().findViewById(R.id.tvIcerik);

        icerikGetir = (Button) getActivity().findViewById(R.id.bIcerikGetir);
        
        db.baglantiyiAc();

        
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        db = new Veritabani(getActivity());
        
    }

    @Override
    public void onClick(View v) {

    }

}[/code]

yukarıda verdiğim kodlama fragment dosyasına veri tabanında veri getirmek istediğim sınıftır. aşağıda ise veritabanı classının kodları mevcut. bir hata var fragmenti açmaya çalıştığımda uygulama kapanıyor.

Veritabani.class kodlaması

[code]

public class Veritabani {

    public static String DB_PATH = "/data/data/paketismigelecek/databases/";

    private static final String DATABASE_ISIM = "database adı.sqlite";
    private static final String DATABASE_TABLO = "turkuicerik";
    private static final int DATABASE_VERSION = 1;

    private final Context contextim;
    private VeritabaniHelper veritabanihelper;
    private SQLiteDatabase veritabanim;


    public static final String KEY_ROW_ID = "_id";
    public static final String KEY_BASLIK = "baslik";
    public static final String KEY_ICERIK = "icerik";

    public Veritabani(Context c) {
        this.contextim = c;
    }

    public Veritabani baglantiyiAc() {

        veritabanihelper = new VeritabaniHelper(contextim);
        veritabanim = veritabanihelper.getWritableDatabase();

        return this;
    }

    public void baglantiyiKapat() {
        veritabanihelper.close();
    }

    private static class VeritabaniHelper extends SQLiteOpenHelper {

        public VeritabaniHelper(Context contextim) {
            super(contextim, DATABASE_ISIM, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL("CREATE TABLE " + DATABASE_TABLO + " (" + KEY_ROW_ID
                    + " INTEGER PRIMARY_KEY AUTOINCREMENT, " + KEY_BASLIK
                    + " TEXT NOT NULL, " + KEY_ICERIK + " TEXT NOT NULL);");
        }

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

            db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLO);
            onCreate(db);
        }

    }

    public String turkuSozu() {

        String[] sutunlar = new String[] { KEY_ICERIK };
        Cursor c = veritabanim.query(DATABASE_TABLO, sutunlar, null, null,
                null, null, null);

        String turkuSozu = "";

        return turkuSozu;
    }
}

[/code]

 

yardımcı olabilir misiniz?

 

212 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-8649-1419588592.jpg
denizkoc
02.01.2015 - 11:44

[code]

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {
    // VERİTABANI VERSİYONU
    private static final int DATABASE_VERSION = 1;
    // VERİTABANI ADI
    private static final String DATABASE_NAME = "turku";
    // KULLANACAĞI BİLGİLERİN DEPOLANACAĞI TABLO
    private static final String TABLE_USERINFO = "turkuinfo";
    // TABLE_USERINFO TABLOSUNUN KOLON İSİMLERİ
    private static final String KEY_ID = "id";
    private static final String KEY_BASLIK = "baslik";
    private static final String KEY_ICERIK = "icerik";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TURKU_TABLE = "CREATE TABLE " + TABLE_USERINFO + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_BASLIK + " TEXT,"
                + KEY_ICERIK + ")";
        db.execSQL(CREATE_TURKU_TABLE);
    }

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

    // SERVİSTEN ALINAN KULLANICI BİLGİLERİ DB'YE KAYDEDEN METOD
    public void addUserInfo(Turku info) {
        // db YAZILABİLİR OLARAK AÇILDI
        SQLiteDatabase db = this.getWritableDatabase();
        // db'ye KAYDEDİLECEK VERİLER CONTENTVALUES'E' ATILDI
        ContentValues values = new ContentValues();
        values.put(KEY_BASLIK, info.getBaslik());
        values.put(KEY_ICERIK, info.getIcerik());
        // insert metodu AÇILARAK contentvalues İÇİNDEKİ veriler db'ye
        // kaydedildi. İŞLEM SONLANDIĞINDA db KAPATILDI.
        db.insert(TABLE_USERINFO, null, values);
        db.close();
    }

    public Turku getUserInfo(int id) {
        // db okunabilir olarak aÇILDI
        SQLiteDatabase db = this.getReadableDatabase();
        // Cursor ile metoda GÖNDERİLEN id ile EŞLEŞEN KULLANACAĞI BULUNANA
        // KADAR ARAMA YAPILDI

        Cursor cursor = db.query(TABLE_USERINFO, new String[] { KEY_ID,
                KEY_BASLIK, KEY_ICERIK }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        // Arama İŞLEMİ SONUCUNDA CURSOR NULL DEĞİLSE moveToFirst() ile
        // bulunan ilk satıra gidildi
        if (cursor != null)
            cursor.moveToFirst();

        // cursor'daki değeerler UserInformation satırındaki kullanıcı
        // bilgilerine atıldı.
        Turku info = new Turku(cursor.getInt(0), cursor.getString(1),
                cursor.getString(2));
        return info;

    }

[/code]

 

 

[code]

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class Bildirimler extends Fragment implements OnClickListener {

    TextView bildirim, icerik;
    Button icerikGetir;
    private Veritabani db;
    private DatabaseHandler handler;
    private Turku turku;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.bildirimler_fragment, container,
                false);

        bildirim = (TextView) view.findViewById(R.id.tvBildirim);
        icerik = (TextView) view.findViewById(R.id.tvIcerik);
        icerikGetir = (Button) view.findViewById(R.id.bIcerikGetir);
        icerikGetir.setOnClickListener(this);
        
        return view;
    }

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.bIcerikGetir){
            handler = new DatabaseHandler(getActivity());
            turku = new Turku(1, "Başlık", "bu denemedir.");
            handler.addUserInfo(turku);
            Log.d("TAG", handler.getUserInfo(1).getBaslik());
            icerik.setText(handler.getUserInfo(1).getIcerik());
                    
        }

    }

}

 

 

bu iki kodlama ile çalıştırdığımda içerik göster dediğimde veritabanına "bu demedir" şeklinde bir cümleyi veritabanına ekliyor benim yapmak istediğim veri tabanında var olan içeriği göstermek ama burada butona her tıkladığımda "bu dedemedir" şeklinde bir cümle ekleniyor. kendi hazırlayacağım bir veri tabanındaki herhangi bir sütun içeriğinin göserilmesini istiyorum.

ayrıca mozille sqlite manager ile database oluşturuorum. bu oluşturduğum database'i kullanmak istiyorum.

[/code]

 

 

picture-31404-1421919825.png
muhcob
01.01.2015 - 09:26

"onCreateView()" içerisinde "db.baglantiyiAc();" işlemini db nesnesini oluşturmadan kullanmaya çalışmışsın. "onActivityCreated()" içerisinde yaptığın "db = new Veritabani(getActivity());" bu işlemden sonra "db.baglantiyiAc();" işlemini yapmayı deneyebilirsin.

Burada database işlemi ile ilgili güzel bir örnek bulunuyor. Daha önce de bu cevabı verdiğimi hatırlıyorum. Eğer problemi çözemezseniz benimle irtibata geçebilirsiniz.