1

我通过viewpager有两个不同视图(片段)的swipeview。我现在希望这两个页面显示来自sqllite数据库的不同数据。问题是我无法弄清楚如何做到这一点,从主要活动我无法访问我的片段和片段源代码视图(TableLayout)我不能访问数据库,因为适配器不会打开(适配器的上下文是super.getActivity())。有没有办法做到这一点?在SwipeView中显示数据库的Android

代码片段的:

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

+0

尝试初始化在onCreateView方法你将对DBAdapter ... – yahya 2013-02-16 22:30:39

回答

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(); 
+0

尝试,但它仍然crashen当我想用dbhandler,代码是正确的当我在一个活动中使用它时工作完美 – knigge 2013-02-16 21:56:37

+0

把你的日志和你的代码片段 – Marckaraujo 2013-02-16 22:09:10

+0

代码是高于LogCat说NullPointerException – knigge 2013-02-16 22:27:17