1

首先让我承认我来自 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 是我的视图的内容。

感谢您的帮助。贝文

4

1 回答 1

0

I'm not going to comment on the Android specific problems. Only on the general compilation error you're getting. Let's take an example:

public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

To be able to call the getName() method, you need an instance of User:

User john = new User("John");
String johnsName = john.getName();

What you're doing is calling the getName() method without any instance of User:

String someName = User.getName();

This doesn't make sense. You don't have any user. Only the User class.

As noted in my comment; variables should start with a lower-case letter. Classes start with an upper-case letter. If you respect this convention, everything is clearer:

john.getName(); // instance method call on object john, of type User.
User.getName(); // static method call on User class.
于 2012-05-26T08:51:14.367 回答