尝试执行Sugar数据库CRUD操作时出错

时间:2013-07-19 15:16:15

标签: android compiler-errors

我(具有平庸的开发技能)实际上尝试使用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开发相对较新的事实,错误可能很明显,我希望得到一个提示如何解决这个问题。

P.S。:此外,我没有完全了解开发人员的声明 - 注意:

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

非常感谢!

//编辑:编辑了从LocationDataSet到数据集的类名称以便澄清

1 个答案:

答案 0 :(得分:0)

首先,get-started-note告诉你需要一个只有一个context参数的构造函数,你在这里做了这个就好了

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

ctx cannot be resolved to a variable

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

您提供的代码并没有真正显示您正在做的事情,但您向我们展示了“DataSet”中的代码,但错误发生在LocationDataSet中?而你正在调用保存DataSet? 必须在对象上调用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();
    }
}