1

ビューページャーを介して2つの異なるビュー(フラグメント)を持つスワイプビューがあります。これら 2 つのページに、sqllite データベースからの異なるデータを表示するようにします。問題は、これを行う方法がわからないことです。主なアクティビティからフラグメントのビュー (TableLayout) にアクセスできず、フラグメントのソースコードからデータベースにアクセスできません。アダプターが開かないためです (アダプターのコンテキストはsuper.getActivity())。これを行う方法はありますか?

フラグメントのコード:

DBAdapter adapter = new DBAdapter(getActivity());

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    if(container==null){
        return null;
    }


    layout=(RelativeLayout)inflater.inflate(R.layout.layout_morning, container, false);



    adapter.open();
    adapter.close();

DBAdapter のコード:

    private static String DB_NAME = "database.dat";

private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx) {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

public DBAdapter open() throws SQLException {

    db = DBHelper.getWritableDatabase();
    return this;
}

public void close() {
    if (db!=null){
        db.close();
    }
    DBHelper.close();
}

エラーは NullPointerException です

4

1 に答える 1

1

もちろん、フラグメント内のデータベースにアクセスできます。getActivity();代わりにthis.

フラグメント クラス内に画像ファイルを保存する例:

db = new DatabaseHandler(getActivity());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageInByte = stream.toByteArray();
db.updateUser(imageInByte);
db.close();
于 2013-02-16T21:43:02.640 に答える