2017-04-21 4 views
0

別のクラスから作成されたデータベースからアイテムをリストしようとしています。 しかし、オブジェクトを再度作成せずにアクセスする方法はわかりません。ここでのコードは次のとおりです。他のクラス(Android/JAVA)から作成されたアクセスデータベース

AddItemActivity:

public class AddItemActivity extends AppCompatActivity { 

MyDBHandler dbHandler; 

... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_item); 

    dbHandler = new MyDBHandler(this, null, null, 1); 
} 

public void insertButtonClick(View view) { 
    Item item = new Item(...); 

    dbHandler.addItems(item); 
} 

MyDBHandler:

Public class MyDBHandler extends SQLiteOpenHelper{ 

... 

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

public void addItems(Item item) { 
    ContentValues values = new ContentValues(); 
    SQLiteDatabase db = getWritableDatabase(); 

    // INSERT ITEMS 
    values.put(COLUMN_ITEM, item.getName()); 
    ... 

    db.close(); 
} 

public String printDatabase() { 
    String dbString = ""; 
    SQLiteDatabase db = getReadableDatabase(); 
    String printQuery = "SELECT * FROM " + TABLE_NAME + " WHERE 1"; 
    Cursor cursor = db.rawQuery(printQuery, null); 
    cursor.moveToFirst(); 

    while (!cursor.isAfterLast()) { 
     dbString += "Item: " + cursor.getString(cursor.getColumnIndex(COLUMN_ITEM)) + 
        " \t Amount: " + cursor.getString(cursor.getColumnIndex(COLUMN_AMOUNT)) + 
        " \t Price: " + cursor.getString(cursor.getColumnIndex(COLUMN_PRICE)); 
     cursor.moveToNext(); 
    } 
    cursor.close(); 
    db.close(); 
    return dbString; 
} 

は今、私は別の活動のすべての項目をリストしたいが、私はdbHandlerにアクセスする方法がわかりませんで作成されました。AddItemActivity

public class ListItemActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_data_base); 
} 

public void printDatabase() { 
    String dbString = ****.printDataBase(); 
    databaseTextView.setText(dbString); 
} 

答えて

0

静的にしてみてください! public static MyDBHandler dbHandler; を書いて、この AddItemActivity.dbHandler

+0

THX!今すぐ働きます:D – Aye

0

のようにアクセスしてみてください、あなたのApplicationクラスでMyDBHandlerのインスタンスを入れてみましたか?あなたの活動で

public MyApplication extends Application 
{ 
    private static MyApplication mInstance; 
    private MyDBHandler mDatabase; 

    ... 

    public static synchronized MyApplication getInstance() 
    { 
     if (mInstance == null) 
     { 
      mInstance = new MyApplication(); 
     } 

     return mInstance; 
    } 

    public MyDBHandler getDatabase() 
    { 
     return mDatabase; 
    } 
} 

、このようにそれを使用します。

public class AddItemActivity extends AppCompatActivity 
{ 
    MyDBHandler dbHandler; 

    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_item); 

     // Get database from application instance 
     dbHandler = MyApplication.getInstance().getDatabase(); 
    } 
} 

public class ListItemActivity extends AppCompatActivity 
{ 
    private MyDBHandler mDb; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_data_base); 

     // Get database from application instance 
     mDb = MyApplication.getInstance().getDatabase(); 
    } 

    public void printDatabase() 
    { 
     String dbString = ****.printDataBase(); 
     databaseTextView.setText(dbString); 
    } 
} 
関連する問題