-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

您尝试访问该方法的方式是,因为您可以从异常中读取“静态”方式,这意味着您正在考虑是否只有该类的一个“副本”在您的系统中运行。这是非常困难的,因为它是一个“任务”(AsyncTask),因此您可能需要该类的更多实例,简而言之,该类的“副本”不止一个。

每个任务都将与其他任务分开执行,因此您必须调用它自己的方法“执行”。

如何告诉JVM这一切?

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

请注意,如果您这样做:

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

只有两个发件人中的第一个将处于活动状态。

如果你使用类似的东西:

Sendcolorvalue.execute();

(我记得你是不可能的,因为没有静态执行方法)你正在创建一个逻辑问题。

我建议您阅读有关静态和实例化类的内容。

于 2013-08-24T15:00:31.693 回答
0

您需要通过执行以下操作创建类的实例:

Sendcolorvalue scv = new Sendcolorvalue();

您现在可以通过调用您创建的方法来执行代码。例如:

scv.myMethod();

于 2013-08-24T14:42:18.793 回答