2016-04-09 17 views
0

Kullanıcıların not yazabileceği, kaydedebileceği ve silebileceği temel bir SQLite etkinliği oluşturmaya çalışıyorum. İlk çalıştırmada aktiviteyi açabilirim ve bir not yazabilirim ancak add düğmesine basıldıktan sonra uygulama dondu ve sonuç olarak çöktü, takip işlemlerinde faaliyeti başlatmaya çalışırken donuyor. bütün konuları Süspansiyon aldı: 16: 51.171 Birlikte Kontrol 24.190-24.196/com.test.test.app W/teknikte robot Moniter banaSQLite giriş ve olağan çökme üzerinde android uygulama dondurulması

04-09 17 bir akışı veren 6.236ms

hataları. Herhangi bir fikir?

MyDbHandler sınıf

package com.test.test.app; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.Cursor; 
import android.content.Context; 
import android.content.ContentValues; 
public class MyDbHandler extends SQLiteOpenHelper{ 


    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "Memos.db"; 
    public static final String TABLE_MEMOS = "Memos"; 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_LYRICS = "lyrics"; 

    public MyDbHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, DATABASE_NAME, factory, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String query = "CREATE TABLE " + TABLE_MEMOS + "(" + 
       COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COLUMN_LYRICS + " TEXT" + 
       ");"; 
     db.execSQL(query); 
    } 

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

    //add a new row to the database 
    public void addLyric(Memos lyrics) { 
     ContentValues values = new ContentValues(); 
     values.put(COLUMN_LYRICS, lyrics.get_lyrics()); 
     SQLiteDatabase db = getWritableDatabase(); 
     db.insert(TABLE_MEMOS, null, values); 
     db.close(); 
    } 

    //delete product from database 
    public void deleteLyrics (String lyrics){ 
     SQLiteDatabase db = getWritableDatabase(); 
     db.execSQL("DELETE FROM " + TABLE_MEMOS + " WHERE " + COLUMN_LYRICS + "=\"" + lyrics + "\";"); 
    } 


    //print out database as string 
    public String databaseToString(){ 
     String dbString = ""; 
     SQLiteDatabase db = getWritableDatabase(); 
     String query = "SELECT * FROM " + TABLE_MEMOS + " WHERE 1"; 

     //cursor point to result 
     Cursor c = db.rawQuery(query, null); 
     //first row 
     c.moveToFirst(); 

     while(!c.isAfterLast()){ 
      if(c.getString(c.getColumnIndex("lyrics"))!= null){ 
       dbString += c.getString(c.getColumnIndex("lyrics")); 
       dbString += "\n"; 
       dbString += "\n"; 
      } 
     } 
     db.close(); 
     return dbString; 
    } 

MemoActivity sınıf

package com.test.test.app; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

import com.test.test.app.MyDbHandler; 

public class MemoActivity extends ActionBarActivity { 

    EditText uInput; 
    TextView uText; 
    MyDbHandler dbHandler; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_memo); 
     uInput = (EditText) findViewById(R.id.uInput); 
     uText = (TextView) findViewById(R.id.uText); 
     dbHandler = new MyDbHandler(this, null, null, 1); 
     printDatabase(); 
    } 

    public void addButtonClicked(View view){ 
     Memos lyrics = new Memos(uInput.getText().toString()); 
     dbHandler.addLyric(lyrics); 
     printDatabase(); 
    } 

    public void deleteButtonClicked(View view){ 
     String inputText = uInput.getText().toString(); 
     dbHandler.deleteLyrics(inputText); 
     printDatabase(); 
    } 

    public void printDatabase(){ 
     String dbString = dbHandler.databaseToString(); 
     uText.setText(dbString); 
     uInput.setText(""); 
    } 
} 
+0

Genelde veri depolamada ve veritabanlarında daha yüksek yol almak için kendi nedenleriniz var, ancak Android için Realm gibi araçları düşündünüz mü? – Eenvincible

+0

@Eenvincible bunu hiç duymamıştı. – LJAM

cevap

0

deneyin böyle, senin koduna c.moveToNext(); eklemek için:

while(!c.isAfterLast()){ 
      if(c.getString(c.getColumnIndex("lyrics"))!= null){ 
       dbString += c.getString(c.getColumnIndex("lyrics")); 
       dbString += "\n"; 
       dbString += "\n"; 
      } 
      c.moveToNext();   
     } 

Eğer while yılında moveToNext() aramazsan isAfterLast() asla gerçek olmayacak, böylece sonsuz bir döngü ve sonuç olarak bellek dışında istisna ile sonuçlanırsınız.

+0

içine bakacağınız teşekkür ederiz Yardım için teşekkürler ama şu anda moveNext – LJAM

+0

@ LJAM üzerinde yöntemi çözemiyorum, üzgünüm moveToNext(); –