我有一个代码,我在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 ...)进行静态引用
答案 0 :(得分:1)
您尝试访问该方法的方式是,因为您可以从异常中读取“静态”方式,这意味着您正在考虑如果系统中只运行该类的一个“副本”。 这是非常困难的,因为它是一个“任务”(AsyncTask),所以有可能你需要更多的那个类的实例,只需要几个字就可以了解该类的一个“副本”。
每个任务将与其他任务分开执行,因此您必须将自己的方法称为“执行”。
如何告诉JVM这一切?
Sendcolorvalue sender = new Sendcolorvalue(params);
sender.execute();
请注意,如果你这样做:
Sendcolorvalue sender = new Sendcolorvalue(params);
Sendcolorvalue secondsender = new Sendcolorvalue(params);
sender.execute();
只有两个发件人中的第一个将处于活动状态。
如果你使用类似的东西:
Sendcolorvalue.execute();
(我记得你是不可能的,因为没有静态执行方法) 您正在创建一个逻辑问题。
我建议你阅读有关静态和实例化类的内容。
答案 1 :(得分:0)
您需要通过以下方式创建类的实例:
Sendcolorvalue scv = new Sendcolorvalue();
您现在可以通过调用您所做的方法来执行代码。 例如:
scv.myMethod();