首先让我承认我来自 Erlang 背景,并且是 Android 和 Java 编程的新手……老实说,面向对象让我很头疼。:)
我在粘旧的栗子上遇到了一些麻烦:“无法对非静态方法进行静态引用”。基本上我正在编写一个应用程序,它从我们的服务器接收 XML 并使用它来创建一个由用户填写的表单。我已成功解析 XML 并创建(并显示)表单。我使用(非常)简单的算法为每个 EditText 字段分配了自己的 ID,以后可以重新创建该算法。
我正忙于提交按钮,该按钮使用用户输入的详细信息将 HTTP 发回我们的服务器。当我尝试检索用户在表单中输入的值时,我的问题就出现了。我正在尝试做的是遍历我的 ID,使用 EditText.findViewById(ID) 打开每个 EditText 实例并使用 getText() 检索其文本。但是,当我这样做时,我收到错误“无法对非静态方法进行静态引用”。
现在我已经阅读了一些内容,我的理解是,这是因为我正在尝试以静态方式访问非静态方法,为了使其成为静态方法,我需要调用实例的方法而不是一般类...问题是我按顺序调用它以获取该特定实例,但我无法弄清楚我应该做些什么不同的事情。
我非常感谢任何人对我的任何帮助、建议或进一步阅读。
干杯,贝文
ps 这是我的代码的相关部分
private static LinearLayout renderForm(...)
{
//Build Fields
...
//Build Buttons
...
Button BT = new Button(App);
BT.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
...
for(int j = 0; j < FFListLength; j++)
{
EditText BinField = (EditText) EditText.findViewById(20000+j);
...
}
...
}
}
}
更新:阅读 JB Nizet 的回答后,我意识到我做错了什么。我改变了这一行: EditText BinField = (EditText) EditText.findViewById(20000+j); to: EditText binField = (EditText) lContent.findViewById(20000+j);
其中 lContent 是我的视图的内容。
感谢您的帮助。贝文