2016-07-20 4 views
0

을 구현할 때 Android 앱이 멈 춥니 다. 처음에는 에뮬레이터로 시작할 때 응용 프로그램이 중단되지만, 실행하기 위해 무엇을 변경했는지는 확실하지 않지만 이제는 addButtonClicked를 구현할 때 onCreate 메소드가 실행됩니다. 메소드를 실행하면 앱이 멈추고 안드로이드 모니터는 "모든 스레드를 일시 중지합니다"라는 메시지를 몇 초마다 표시하고 어디에서 디버깅을 시작할 지 모르겠습니다. 필자는 안드로이드 개발을 처음 접했을 때 올바른 방향으로 나아갈 수있는 조언을 주시면 감사하겠습니다.SQLite 데이터베이스를 구현할 때

MainActivity.java

Products.java

public class Products { 
private int _id; 
private String _productname; 

public Products(){ 
} 

public Products(String productname) { 
    this._productname = productname; 
} 

public void set_id(int _id) { 
    this._id = _id; 
} 

public void set_productname(String _productname) { 
    this._productname = _productname; 
} 

public int get_id() { 
    return _id; 
} 

public String get_productname() { 
    return _productname; 
} 

} 

당신의 databaseToString 방법에 대한 MyDBHandler.java

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 = 15; 
private static final String DATABASE_NAME = "products.db"; 
public static final String TABLE_PRODUCTS = "products"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_PRODUCTNAME = "productname"; 

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_PRODUCTS +"(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT ," + 
      COLUMN_PRODUCTNAME +" TEXT " + 
      ");"; 

    db.execSQL(query); 
} 

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

//Add new row to the database 
public void addProduct(Products product){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_PRODUCTNAME, product.get_productname()); 
    SQLiteDatabase db = getWritableDatabase(); 
    db.insert(TABLE_PRODUCTS, null, values); 
    db.close(); 
} 

//Delete product from database 
public void deleteProduct(String productName){ 
    SQLiteDatabase db = getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_PRODUCTS + " WHERE " + COLUMN_PRODUCTNAME + "=\"" + productName + "\";"); 
} 

//Print of DB as sting 
public String databaseToString(){ 
    String dbString = ""; 
    SQLiteDatabase db = getWritableDatabase(); 
    String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1"; 

    //Cursor point to a location in your results 
    Cursor c = db.rawQuery(query, null); 
    //Move to the first row in your results 
    c.moveToFirst(); 

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


} 

답변

0

당신은이 검색 작업을 수행하고 있습니다. UI 스레드가 아닌 스레드에서 읽기 작업을 수행해야합니다. AsyncTask에서 페치를 시도하십시오. 그것은 작동해야합니다. databaseToString에 대한 구현은 AsyncTask에 의해 처리되어야합니다.

해피 코딩 ..

+0

답장을 보내 주셔서 감사합니다. 그것이 의미가 있습니다. 어떻게 그렇게 할 것입니까? – stephensonpj

+0

AsyncTask ...의 문서를 읽으십시오. – Ishant

관련 문제