-1

AsyncTask で http リクエストを行うコードがあります

public class Sendcolorvalue extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);

    }

    @Override
    protected String doInBackground(String... params) {
    //do your work here
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpPost = new HttpGet("http://192.168.0.102/HR/index.php?command=" + command);
        try {
            HttpResponse response = httpClient.execute(httpPost);
        } catch (ClientProtocolException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
           // do something with data here-display it or send to mainactivity
    }

}

私が欲しいのは、メニュー項目の選択されたイベントから実行することなので、次のように入力します。

Sendcolorvalue.execute();

エラーが表示されます:

タイプ AsyncTask から非静的メソッド execute(String...) への静的参照を作成できません

4

2 に答える 2

1

そのメソッドにアクセスしようとしている方法は、例外から「静的」な方法で読み取ることができるため、システムで実行されているそのクラスの「コピー」が 1 つしかないかのように考えていることを意味します。これは「タスク」(AsyncTask) であるため非常に難しく、そのクラスの複数のインスタンス、つまりそのクラスの複数の「コピー」が必要になる可能性があります。

各タスクは他のタスクとは別に実行されるため、独自のメソッド「execute」を呼び出す必要があります。

このすべてをJVMに伝える方法は?

Sendcolorvalue sender = new Sendcolorvalue(params);
sender.execute();

これを行う場合は、次のことに注意してください。

Sendcolorvalue sender = new Sendcolorvalue(params);
Sendcolorvalue secondsender = new Sendcolorvalue(params);
sender.execute();

2 つの送信者のうち最初の送信者のみがアクティブになります。

次のようなものを使用する場合:

Sendcolorvalue.execute();

(静的な実行メソッドがないため、不可能であることを覚えています)ロジックの問題を作成しています。

静的クラスとインスタンス化クラスについて何か読むことをお勧めします。

于 2013-08-24T15:00:31.693 に答える