SQLiteOpenHelperを拡張するクラスからメソッド(HomeFragmentのcreateButton)を呼び出そうとしています。私はこのフラグメントを開くためにgetSupportFragmentManagerを使用しているので、このgetSupportFragmentManagerをエラーなく使用するためにコンテキストを渡す必要があります。SQLiteOpenHelperのメソッドonAttach()を解決できません
private FragmentActivity myContext;
@Override
public void onAttach(Context context) {
myContext=(FragmentActivity) context;
super.onAttach(context);
}
public void buttonCreator(Drawable d,String a) {
Log.d("tag_name", "buttonCreator" + myContext);
HomeFragment homeFragment = (HomeFragment)myContext.getSupportFragmentManager().getFragments().get(1);
homeFragment.createButton(d, a);
}
しかし、「super.onAttach(コンテクスト)」を呼び出すときに、私はこの方法ONATTACH()は解決できないこと、エラーが発生します。私はこの方法でコンテキストを使用して試してみました。 SQLiteOpenHelperでonAttach()を使用して、フラグメントを開くgetSupportFragmentManagerにアクセスできる方法はありますか?私はまた、コンテキストをこのようにアクセスしようとしている
:「『getSupportFragmentManagerは()』メソッドを解決できない」
はここ
private Context mContext;
public DatabaseStructure(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("tag_name", "Entered DatabaseStructure" + context);
mContext = context;
}
public void buttonCreator(Drawable d,String a) {
Log.d("tag_name", "buttonCreator" + myContext);
HomeFragment homeFragment = (HomeFragment)mContext.getSupportFragmentManager().getFragments().get(1);
homeFragment.createButton(d, a);
}
しかし、私はこれを行うときには、完全なクラスのコードです:
public class DatabaseStructure extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "database";
// Table Names
private static final String DB_TABLE = "table_image";
// column names
private static final String KEY_NAME = "image_name";
private static final String KEY_IMAGE = "image_data";
// Table create statement
private static final String CREATE_TABLE_IMAGE = "CREATE TABLE " + DB_TABLE + "("+
KEY_NAME + " TEXT," +
KEY_IMAGE + " BLOB);";
private Context mContext;
public DatabaseStructure(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("tag_name", "Entered DatabaseStructure" + context);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
// creating table
db.execSQL(CREATE_TABLE_IMAGE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// on upgrade drop older tables
db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
// create new table
onCreate(db);
}
public void addEntry(String name, byte[] image) throws SQLiteException {
SQLiteDatabase db = this.getWritableDatabase();
Log.d("tag_name", "Enter Add Entry" + db);
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, name);
cv.put(KEY_IMAGE, image);
db.insert(DB_TABLE, null, cv);
}
public boolean checkDatabase() {
Log.d("tag_name", "In CheckDatabase method");
SQLiteDatabase db = this.getWritableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM " + DB_TABLE, null);
if (mCursor.moveToFirst())
{
mCursor.moveToFirst();
String appName = mCursor.getString(0);
byte[] image = mCursor.getBlob(1);
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
Drawable d = new BitmapDrawable(Resources.getSystem(), bitmap);
//Drawable d = new BitmapDrawable(bitmap);
buttonCreator(d, appName);
return true;
} else
{
return false;
}
}
private FragmentActivity myContext;
@Override
public void onAttach(Context context) {
myContext=(FragmentActivity) context;
super.onAttach(context);
}
public void buttonCreator(Drawable d,String a) {
Log.d("tag_name", "buttonCreator" + myContext);
HomeFragment homeFragment = (HomeFragment)myContext.getSupportFragmentManager().getFragments().get(1);
homeFragment.createButton(d, a);
}
}
私はこのコードが 'SQLiteOpenHelper'にどのように関係しているか理解しませんでした。フルクラスを投稿できますか?このトピックでは不要なメソッドを削除するだけです。 –
あなたはデータベースを管理する責任しか持たないクラスからのビューに関連する何かをしたいのですか?通常それは逆です。 –
@hostman私はSQLiteOpenHelperを継承した完全なActivityを投稿しました。 – Natalie