0

我(具有平庸的开发技能)实际上尝试使用 Sugar 作为我的 android 项目的数据库包装器。因此,我按照“入门指南”(http://satyan.github.io/sugar/getting-started.html)尽快做好准备。

我为我的实体创建了一个名为 DataSet.java 的类:

import com.orm.SugarRecord;

public class DataSet extends SugarRecord{
    int someData;
    double evenMoreData;

    public DataSet(Context ctx){
        super(ctx);
    }

public DataSet(Context ctx, 
        int someData, 
        long evenMoreData) {
    super(ctx);
    this.someData = someData;
    this.evenMoreData = evenMoreData;
    }
}

我通过以下方式调用课程:

someGreatClass something;
someMoreGreatCode somemore;

DataSet dataSet = new DataSet(
            ctx,                            // Here Eclipse throws the error
            something.method(), 
            somemore.anothermethod());
DataSet.save();

当我尝试构建它并将其推送到我的设备上时,Eclipse 拒绝编译并抛出此错误:

ctx cannot be resolved to a variable

考虑到我对 Android 开发比较陌生,这个错误可能很明显,我希望得到一个提示如何解决这个问题。

PS:此外,我没有完全了解开发人员在入门说明中的声明:

Please retain one constructor with Context argument. (This constraint will be removed in subsequent release.)

非常感谢!

// 编辑:是否将类名从 LocationDataSet 编辑到 Data set 以进行澄清

4

1 回答 1

0

首先,入门说明告诉你,你需要一个只有上下文参数的构造函数,你在这里做了,所以没关系

public DataSet(Context ctx){
    super(ctx);
}

关于

ctx cannot be resolved to a variable

我想你没有一个叫ctx的变量,不知道你是否熟悉android上下文?(基本上上下文是服务或活动),如果您在活动或服务中使用此代码,只需使用“this”关键字而不是 ctx 变量

您提供的代码并没有真正显示您在做什么,但是您向我们展示了“DataSet”中的代码,但是 LocationDataSet 发生了错误?你在 DataSet 上调用 save 吗?必须在对象上调用 save 方法,而不是在类上。

也不要忘记糖需要清单中的特殊应用程序类

更新示例:

你的数据集类(sugarrecord)应该是这样的,就我所见,这在你的代码中是可以的

public class DataSet extends SugarRecord<DataSet>{

private String someData;

public DataSet(Context c){
    super(c);
}

    public DataSet(Context c, String someData){
    super(c);
    this.someData = someData;
}

}

使用记录的活动应如下所示

public class SomeActivity extends Activity {

    public void someMethodThatUsesDataSet(){
        // Create a dataset object with some data you want the save and a context
        // The context we use here is 'this', this is the current instance of SomeActivity, 
        // you absolutely need this, I think this is what you're doing wrong, 
        // you can't use ctx here because that's not a known variable at this point
        DataSet example = new DataSet(this, "data you want to save");

        // Tell Sugar to save this record in the database
        example.save();
    }
}
于 2013-07-19T15:34:01.443 回答