android刷新活动

时间:2011-08-01 02:23:34

标签: android

您好我想每秒刷新一次活动。我正在以下列方式做,但它不工作请指导。这是代码

public class MyActivity extends Activity {
     Prefs myprefs = null;
       private XYPlot mySimpleXYPlot;
       Number[] series1Numbers=new Number[10];
       Number[] series2Numbers=new Number[10];
       int a,b,c,d,ee,f,g;
    @Override
    public void onCreate(Bundle savedInstanceState)  {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.graphval);

         Intent intent = new Intent(this, MyActivity .class);
         PendingIntent sender = PendingIntent.getService(this, 0, intent, 0);


         long firstTime = SystemClock.elapsedRealtime();
         firstTime += 1 * 60 * 1000;


         AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
         am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,1 * 60 * 1000, sender);
         mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);



         this.myprefs = new Prefs(getApplicationContext());

         ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>(); 
        JSONObject json = JSONfunctions.getJSONfromURL("............");

         try{

            JSONArray  earthquakes = json.getJSONArray("graphs");

            for(int i=0;i<earthquakes.length();i++){                        
                HashMap<String, Object> map = new HashMap<String, Object>();
                 JSONObject e = earthquakes.getJSONObject(i);


             a = Integer.parseInt(e.getString("sensor_a"));
             b = Integer.parseInt(e.getString("sensor_b"));
             c = Integer.parseInt(e.getString("sensor_c"));
             d = Integer.parseInt(e.getString("sensor_d"));
             ee = Integer.parseInt(e.getString("sensor_e"));
             f = Integer.parseInt(e.getString("sensor_f"));
             g = Integer.parseInt(e.getString("sensor_g"));

           }  






            series1Numbers[0]=a;
            series1Numbers[1]=b;
            series1Numbers[2]=c;
            series1Numbers[3]=d;
            series1Numbers[4]=ee;
            series1Numbers[5]=f;
            series1Numbers[6]=g;

           // Turn the above arrays into XYSeries:
            XYSeries series1 = new SimpleXYSeries(
                    Arrays.asList(series1Numbers),          // SimpleXYSeries takes a List so turn our array into a List
                    SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use the element index as the x value
                    "Series1");                             // Set the display title of the series

            // Same as above, for series2
            XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, 
                    "Series2");

           // Create a formatter to use for drawing a series using LineAndPointRenderer:
            LineAndPointFormatter series1Format = new LineAndPointFormatter(
                    Color.rgb(0, 200, 0),                   // line color
                    Color.rgb(0, 100, 0),                   // point color
                    Color.rgb(150, 190, 150));              // fill color (optional)

            // Add series1 to the xyplot:
            mySimpleXYPlot.addSeries(series1, series1Format);

            // Same as above, with series2:
            mySimpleXYPlot.addSeries(series2, new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0, 100),
                    Color.rgb(150, 150, 190)));


            // Reduce the number of range labels
            mySimpleXYPlot.setTicksPerRangeLabel(3);

            // By default, AndroidPlot displays developer guides to aid in laying out your plot.
            // To get rid of them call disableAllMarkup():
            mySimpleXYPlot.disableAllMarkup();





         }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
         }


    }  }   

2 个答案:

答案 0 :(得分:2)

您可以使用handler刷新活动。

public class MyActivity extends Activity {
    Handler handler = new Handler();
    ...
    public void onCreate(Bundle savedInstanceState)  {
        ...
        handler.postDelayed(runnable, 1000);
        ...
    }

    ....

    private Runnable runnable = new Runnable() {
        public void run() {
            if(activity is active) {
                // Do some updates
                handler.postDelayed(this, 1000);
            }
        }
    };
    ....
}

答案 1 :(得分:1)

OnCreate只被调用一次(创建时)并且无法执行数据刷新。

如果要刷新数据,则需要在后台线程中执行数据更改,然后附加监听器以执行GraphView的更新。

以下是使用工作线程更新UI的几个示例。

此外,为了更全面地了解更新UI元素和线程,google有一个示例应用程序,它已经执行此操作,源代码可从以下位置获得: