1

まず、私は Erlang のバックグラウンドを持っており、Android と Java プログラミングは初めてであることを告白することから始めましょう... 正直なところ、オブジェクト指向は頭を悩ませています。:)

粘着性のある古い栗に問題があります:「非静的メソッドへの静的参照を作成できません」。基本的に、サーバーから XML を受信し、それを使用してユーザーが入力するフォームを作成するアプリを作成しています。XML を正常に解析し、フォームを作成 (および表示) することができました。後で再作成できる (非常に) 単純なアルゴリズムを使用して、各 EditText フィールドに独自の ID を割り当てます。

I am busy with the submit button, which makes a HTTP post back to our server with the user entered details. My problem comes in when I try to retrieve the values that the user has entered into the form. What I am attempting to do is loop through my IDs, open each EditText instance using EditText.findViewById(ID) and retrieve its text using getText(). When i do so however I receive the error "Cannot make a static reference to the non-static method".

Now I've done some reading and the way I understand it is that this is because I am trying access a a non-static method in a static way and in order to make it static I need to call the method of an instance rather than the class in general... the problem is that I am calling it IN ORDER to get that particular instance and I can't figure out what I should be doing differently.

誰かが私のために持っている助け、アドバイス、またはさらに読んでいただければ幸いです。

乾杯、ベヴァン

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

Android 固有の問題についてはコメントしません。あなたが得ている一般的なコンパイルエラーでのみ。例を見てみましょう:

public class User {
    private String name;

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

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

getName() メソッドを呼び出せるようにするには、User のインスタンスが必要です。

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

あなたがしているのは、User のインスタンスなしで getName() メソッドを呼び出すことです。

String someName = User.getName();

これは意味がありません。ユーザーがいません。User クラスのみ。

私のコメントで述べたように; 変数は小文字で始める必要があります。クラスは大文字で始まります。この規則を尊重すれば、すべてがより明確になります。

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 に答える