onButtonClcick
按钮index
,一个graph
应该显示从 URL 获取数据。我用过AsyncTask
对于同样的。
我陷入了两种方法之间。
1) 如果我打电话 afterload()
postExecute()
中的方法调用index
单击按钮,我刚刚获得第一个屏幕截图,如下所示,即图表未显示。
我调试了一下,发现调用了afterload()方法,但仍然没有显示图形。
2) 如果我不打电话afterload()
postExecute()
中的方法。相反,我复制了 afterload()
的所有内容方法进入onCreate()
方法新类graphView
,然后图表正在显示。如第二张截图所示
但是所有其他功能(例如 ONCLICKLISTENERS、过滤列表数据)都会丢失。 (请注意,在第二个屏幕截图中,表格未显示)。这是由于使用 setContentView()
在第二个 Activity 中,因此布局重新启动,从而控制权转移到第二个 Activity 。
任何帮助都将挽救生命!!!
DataAttach.java
public class DataAttach extends Activity {
//ALL VARIABLES DECLARED
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
public void init() {
//ALL FINDBYVIEWID COMMANDS
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "http://abc.com/" });
ed.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//filtering listview data
}
});
lsym.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
btnindex.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mySimpleXYPlot.setVisibility(View.VISIBLE);
WebPageTask task1 = new WebPageTask();
task1.execute(new String[] { "http://pqr.com/" });
}
});
btngainer.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "http://xyz.com/" });
}
});
btnloser.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "http://ijk.com/" });
}
});
finally {
dbM.close();
}
}
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
//DO SOMETHING
}
@Override
protected void onPostExecute(String result) {
//DO SOMETHING
}
}
private class WebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
//FETCHING DATA FROM URL
}
@Override
protected void onPostExecute(String result) {
//POPULATING 'time' & 'current' ARRAYS
afterload(time, current);
//============================================================================
//============================================================================
//IF I USE BELOW COMMENTED CODE THEN IT DISPLAYS GRAPH BUT ALL THE ONCLICKLISTENERS DOESN'T WORK.
//============================================================================
//============================================================================
// Bundle b = new Bundle();
// b.putStringArray("time", time);
// b.putStringArray("current", current);
//
// Intent i = new Intent(getApplicationContext(), DrawGraph.class);
// i.putExtras(b);
// DataAttach.this.startActivity(i);
}
public void afterload(String[] time, String[] current) {
//POPULATING 'timenumber' & 'currentnumber' ARRAYS
Number[] series1Numbers = timenumber;
Number[] series2Numbers = currentnumber;
XYSeries series1 = new SimpleXYSeries(
Arrays.asList(series1Numbers),
Arrays.asList(series2Numbers), "Reliance");
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)
mySimpleXYPlot.addSeries(series1, series1Format);
mySimpleXYPlot.setTicksPerRangeLabel(2);
mySimpleXYPlot.setTicksPerDomainLabel(2);
mySimpleXYPlot.setRangeStep(XYStepMode.INCREMENT_BY_VAL, 1);
mySimpleXYPlot.setDomainStep(XYStepMode.SUBDIVIDE, 10);
mySimpleXYPlot.setDomainValueFormat(new MyDateFormat());
mySimpleXYPlot.disableAllMarkup();
}
}
public class MyDateFormat extends Format {
//CONVERTING DATE FORMAT
}
第一个和第二个屏幕截图是在点击之前和之后拍摄的 INDEX
按钮。
最佳答案
在 afterload() 方法末尾使用 mySimpleXYPlot.redraw() 或 mySimpleXYPlot.postRedraw()。
如果您看到来源:redraw()方法使 View 无效,因此将显示您的数据。
关于java - OnPostExecute 不起作用,无法绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586021/