Android 对下一个代码重复AsyncTask
我有一个只从web vía Jsoup获取信息的代码,我希望每秒刷新此信息。我尝试了在Google和stackoverflow中找到的所有代码,但没有成功。事先非常感谢。[已解决] 现在,我试图将一个数组从MainActivity发送到另一个名为“Activity_allday”的活动,当调用viewallday()函数时,按“btviewallday”按钮,但运气不佳。有什么建议吗 LogCat错误:在id为“btviewallday”的视图类android.widget.Button上的onClick处理程序的活动类com.example.Chispa.MainActivity中找不到viewallday(视图)方法 我注意到错误来自于在viewallday接收两个值(视图,p对)。如何在viewallday函数中接收“Pair p”值 以下是新的应用程序代码: [主要活动]Android 对下一个代码重复AsyncTask,android,android-asynctask,refresh,Android,Android Asynctask,Refresh,我有一个只从web vía Jsoup获取信息的代码,我希望每秒刷新此信息。我尝试了在Google和stackoverflow中找到的所有代码,但没有成功。事先非常感谢。[已解决] 现在,我试图将一个数组从MainActivity发送到另一个名为“Activity_allday”的活动,当调用viewallday()函数时,按“btviewallday”按钮,但运气不佳。有什么建议吗 LogCat错误:在id为“btviewallday”的视图类android.widget.Button上的on
public class MainActivity extends Activity {
private TextView tvmax, tvmid, tvmin, tvactualval,tvvaloractual,tvdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvdate=(TextView)findViewById(R.id.tvdate);
tvvaloractual=(TextView)findViewById(R.id.tvvaloractual);
tvmax=(TextView)findViewById(R.id.tvmaximo);
tvmid=(TextView)findViewById(R.id.tvmedio);
tvmin=(TextView)findViewById(R.id.tvminimo);
new BackGroundTask().execute();
callAsynchronousTask();
}
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
BackGroundTask performBackgroundTask = new BackGroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 1000); //execute in every 1000 ms
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class Pair
{
public String[] bar;
public String[] values;
}
public void viewallday(View view, Pair p) {
Intent intent = new Intent(this, Activity_allday.class);
Bundle bundle =new Bundle();
bundle.putStringArray("bar", p.bar);
intent.putExtras(bundle);
startActivity(intent);
}
class BackGroundTask extends AsyncTask<Void, Void, Pair> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
public String[] getValuesGraph(Document doc) {
int cont=24,var=7;
String bar[] = new String[cont];
/*
* Getting elements from the graphic in an array from 0-23. 0 it's 1:00am, 23 it's 00:00am
*/
for (cont=0; cont < 24; cont++){
String onMouseOver = doc.select("a").get(var+cont).attr("onMouseOver");
bar[cont] = onMouseOver.split("'")[9];
}
return bar;
}
public String[] getValuesFooter(Document doc) {
String values[] = new String[7];
/*
* Getting elements from the graphic footer
*/
String delimiters= "[ /]+";
Elements elements = doc.select("td.cabeceraRutaTexto");
elements.size(); // 6
/* Getting text from table */
values[0] = elements.get(0).text(); // TITLE
values[1] = elements.get(1).text(); // TEXT MAX VALUE
values[2] = elements.get(2).text(); // TEXT MIDDLE VALUE
values[3] = elements.get(3).text(); // TEXTO MIN VALUE
/* Getting numbers from table */
values[4] = elements.get(4).text().split(delimiters)[0]; // NUMBER MAX VALUE
values[5] = elements.get(5).text().split(delimiters)[0]; // NUMBER MIDDLE VALUE
values[6] = elements.get(6).text().split(delimiters)[0]; // NUMBER MIN VALUE
return values;
}
@Override
public Pair doInBackground(Void... params) {
Pair p = new Pair();
try {
URL url= new URL("http://www.myweb.com");
Document doc = Jsoup.connect(url.toString()).get();
p.bar = getValuesGraph(doc);
p.values = getValuesFooter(doc);
/*
* Getting elements from the graphic in an array from 0-23. 0 it's 1:00am, 23 it's 00:00am
*/
return p;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public String ActualHourValue() {
Format formatter = new SimpleDateFormat("H");
String onlyhour = formatter.format(new Date());
return onlyhour;
}
public void ShowDateHour(){
Calendar c = Calendar.getInstance();
SimpleDateFormat df3 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss a");
String formattedDate3 = df3.format(c.getTime());
tvdate.setText("Fecha y hora actuales : "+formattedDate3);
}
@Override
protected void onPostExecute(Pair p) {
int hour = Integer.parseInt(ActualHourValue());
tvvaloractual.setText(p.bar[hour]+" €/MWh");
tvmax.setText(p.values[4]+" €/MWh");
tvmid.setText(p.values[5]+" €/MWh");
tvmin.setText(p.values[6]+" €/MWh");
ShowDateHour();
/*super.onPostExecute(p.values);*/
}
}
}
}您在任何地方调用
callAsynchronousTask
吗?非常感谢您的帮助和时间。你完全正确。我不会在任何地方调用该函数!这个应用程序现在正在做我想做的事情。我对Java和Android完全是新手,希望这段代码能帮助别人。我从onCreate()调用新BackGroundTask().execute()下的callAsynchronousTask;。这是打电话的最好地方@尼古拉斯根本没有使用计时器。不管看这些文件有多快,我想这要看情况而定。您可能希望将其置于onResume
上,并可能取消onPause
中的计时器。你可能想做一些进一步的检查,看看当你最小化你的应用程序时计时器是否仍在运行,以及这是否是你真正想要的。另外,如果屏幕方向改变,会发生什么情况?您是否会运行多个计时器?您还应该假设对http请求的响应将在一秒钟以上返回。
Public class Activity_allday extends MainActivity {
private TextView tvall;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.all_day_prices);
tvall = (TextView) findViewById(R.id.tvall);
Bundle bundle = this.getIntent().getExtras();
String[] bar=bundle.getStringArray("bar");
/*tvall.setText(bar[0]);*/
}
public void back (View view) {
finish();
}