数据库信息不会显示在Fragment中?

时间:2013-12-04 00:10:36

标签: android android-fragments

我正在制作一个有趣的小游戏,我让一切都很完美。数据库全部显示在文本视图中,就像它们应该具有的一切都很棒。但是我决定添加一个片段视图来拥有多个页面(而不是单击按钮并显示/隐藏信息)而且我认为一切都很好。这些页面按原样滑动,但现在的问题是数据库中的信息不再显示在textview中了......

我已经包含了与数据库相关的所有代码:

private DBAdapter db;
private DBAdapter_Gold dbGold;

db = new DBAdapter(this.getActivity());
dbGold = new DBAdapter_Gold(this.getActivity());
dbGold.open();

try {
        String destPath = "/data/data/" + getActivity().getPackageName() + "/databases/GoldDB";
        File f = new File(destPath);
        if (!f.exists()) {
            CopyDB(getActivity().getBaseContext().getAssets().open("GoldDB"), new FileOutputStream(destPath));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        dbGold.open();
        Cursor c = DBAdapter_Gold.getAllRecords();
        if (c.moveToFirst()) {
            do {
                DisplayRecordGold(c);
            } while (c.moveToNext());
        }

    } catch (Exception e) {
        Log.e("ERROR", "ERROR IN CODE:" + e.toString());
        e.printStackTrace();
    }


public void CopyDB(InputStream inputStream, OutputStream outputStream) throws IOException {
    // ---copy 1K bytes at a time---
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
    inputStream.close();
    outputStream.close();
}

public void DisplayRecordGold(Cursor c) {
    TextView shopGoldValue1 = (TextView) getActivity().findViewById(R.id.shopGoldValue1);
    shopGoldValue1.setText(c.getString(1).toString());
    shopGoldValue1.setText("asdf");
}

现在我知道为了让所有的语法错误消失,我不得不在很多事情面前添加:getActivity(),所以也许我在那里做错了。我一直盯着这个太长时间了,真的可以在这里使用一些帮助..

感谢。

修改

我应该指出错误最有可能出现在DisplayRecord方法中。似乎它甚至没有调用该方法或者它没有找到变量来更改文本。正如你所看到的那样,我将文本设置为“asdf”以查看它是否做了什么,它只是保持空白。

1 个答案:

答案 0 :(得分:0)

将您的代码更改为:

db = new DBAdapter(this.getActivity().getApplication());
dbGold = new DBAdapter_Gold(this.getActivity().getApplication());