2016-05-17 12 views
-2

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); 
} 
} 
+1

私はこのコードが 'SQLiteOpenHelper'にどのように関係しているか理解しませんでした。フルクラスを投稿できますか?このトピックでは不要なメソッドを削除するだけです。 –

+0

あなたはデータベースを管理する責任しか持たないクラスからのビューに関連する何かをしたいのですか?通常それは逆です。 –

+0

@hostman私はSQLiteOpenHelperを継承した完全なActivityを投稿しました。 – Natalie

答えて

3

onAttach()は、Fragmentのコールバックメソッドです。これは、リスナーや他のものをフラグメントクラスに追加するためにオーバーライドすることができます。

あなたが言ったことは、あなたのクラスをSQLiteOpenHelperから拡張して、オーバーライドする方法がonAttach()ではありません。 だから、

への答えは、私が アクセスgetSupportFragmentManagerをできるように、私は私のフラグメントを開くためにSQLiteOpenHelperにONATTACH()を使用することができる方法はありますか?

- NO

また、コンテキストを取得する方法については、私はあなたのクラスをSQLiteOpenHelperに拡張する理由はわかりませんが、フラグメントを開始するコンテキストを取得したい場合はgetSupportFragmentManager()を使用してください。そのオブジェクトを作成します。

+0

フィードバックありがとうございます。 「オブジェクトを作成するときに、そのクラスのコンテキストを渡すことができます」と言います。しかし、どうすればコンテキストを渡すことができるので、context = nullにならないのでしょうか? – Natalie

+0

アクティビティを実行しました。コンテクストを取得しました –

+0

フラグメントが添付されているときにデータベース接続を開く必要があります。 Loaderを使用してバックグラウンドでデータベースを操作する最善の方法。 –

関連する問題