Android 对下一个代码重复AsyncTask

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

我有一个只从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”值

以下是新的应用程序代码:

[主要活动]

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();
}