我在sqlite中有一个int数据我试图访问以显示活动中的状态。以下是数据库帮助程序活动中带有getCA()游标的活动页面。
我在尝试获取数据方面遇到了麻烦,特别是“第一个”数字,它是一个int作为在同一活动中在apple类之外共享的变量。正如你在下面看到的那样,我试图通过首先将int变量df(设置为0,因此它对第一个没有影响)添加到int变量来“欺骗”,所以我基本上可以得到第一个数字。
但是这个新的dfe变量在apple类的内部或外部都无法识别?我试过把它变成'public int',但它说公共在这种情况下无效。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myDb= new DbA(this);
myDb.open();
setContentView(R.layout.mainpage);
getdata();
}
private void getdata() {
Cursor cursor = myDb.getCA();
apple(cursor);
}
private void apple(Cursor cursor) {
int df = 0;
if (ur.moveToFirst()) {
do {
int first = cursor.getInt(0);
int coma = cursor.getInt(1);
String desc = cursor.getString(2);
// Append data to the message:
int dfe = df + first;
} while(cursor.moveToNext());
}
cursor.close();
///this last line below, eclipse cannot recognize 'dfe' as a variable?
int cot = dfe;
}
请帮忙。你可能会说,我对android很新。
我想基本上问题是如何与同一活动页面中的其他类共享从apple类中的数据库派生的变量?提前谢谢。
答案 0 :(得分:0)
int dfe是在循环中定义的,因此变量只能在循环中访问,将其更改为方法变量
// Append data to the message:
int dfe = df + first;
修正:使用此方法
private void apple(Cursor cursor) {
int df = 0;
int dfe;
if (cursor.moveToFirst()) {
do {
int first = cursor.getInt(0);
int coma = cursor.getInt(1);
String desc = cursor.getString(2);
// Append data to the message:
dfe = df + first;
} while(cursor.moveToNext());
}
cursor.close();
int cot = dfe;
}
答案 1 :(得分:0)
看起来你也是Java新手。 ;)
在您的代码中,apple
不是一个类,它是一种方法
你用class Name
定义类,它应该在一个自己的文件中(除非你想要一个内部类,但我认为你不要)。
您收到该错误的原因是因为方法不在其字段上设置可见性修饰符,它们对方法是私有的(或者在声明它们的scope
内。如果您想要访问在方法(或循环)内外的变量,你应该在包含的类或方法中声明它
您的dfe
变量也是如此,它在do...while
循环内声明,无法在其外部显示。
您应该阅读variable scope
来解决您的问题。
我不确定你是否混淆了一个叫apple
类的术语,或者你是否真的希望它作为一个类。如果你确实想要它作为一个类,你可以做到这一点:
public Apple {
// declare the fields you want to store for Apple
private int dfe;
private String description;
public Apple(int first, int coma, String description)
// use the arguments to set your variables
this.dfe = //some calculation
this.description = description;
}
// define methods for accessing the fields
public int getDfe() {
return this.dfe;
}
public String getDescription() {
return this.description;
}
}
然后在读取光标的方法中:
(我假设它包含多个结果)
public List<Apple> getDemApples(Cursor cursor) {
List<Apple> apples = new ArrayList<Apple>();
if (cursor != null) {
int tempFirst;
int tempComa;
String tempDescription;
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
tempFirst = cursor.getInt(0);
tempComa = cursor.getInt(1);
tempDescription = cursor.getString(2);
apples.add(new Apple(tempFirst, tempComa, tempDescription));
cursor.moveToNext();
}
}
return apples;
}
或者那些东西。同样,我可能误解了你想要做的事情。