您好我想每秒刷新一次活动。我正在以下列方式做,但它不工作请指导。这是代码
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());
}
} }
答案 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有一个示例应用程序,它已经执行此操作,源代码可从以下位置获得: