2016-07-20 9 views
0

最初は、エミュレータで起動したときにアプリがクラッシュするだけでしたが、実行するために変更した内容はわかりませんが、addButtonClickedを実装するとonCreateメソッドが実行されますメソッドは、アプリがちょうどストールし、Androidモニターは数秒ごとに "すべてのスレッドを中断しています"と表示し、デバッグを開始する場所がわからない。正しい方向のポインタは、私がAndroid開発にはかなり新しいので大いに感謝します。あなたが取得する操作を実行しているあなたのdatabaseToString方法についてSQLiteデータベースを実装するときにAndroidアプリが停止する

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; 
} 

} 

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

関連する問題