【问题标题】:Android showing database in SwipeViewAndroid 在 SwipeView 中显示数据库
【发布时间】:2013-02-16 21:36:14
【问题描述】:

我通过 viewpager 有一个带有两个不同视图(片段)的 swipeview。我现在希望这两个页面显示来自 sqllite 数据库的不同数据。问题是我无法弄清楚如何做到这一点,从主要活动我无法访问我的片段上的视图(TableLayout)以及从片段源代码我无法访问数据库,因为适配器不会打开(适配器的上下文是超级.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

【问题讨论】:

  • 尝试在 onCreateView 方法中初始化你的 DBAdapter...

标签: android android-fragments android-viewpager android-sqlite android-context


【解决方案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();

【讨论】:

  • 试过了,但是当我想使用 dbhandler 时它仍然崩溃,代码是正确的,当我在活动中使用它时效果很好
  • 你需要把 DBAdapter adapter = new DBAdapter(getActivity()); onCreateView 内部
猜你喜欢
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多