0

我试图从我的 Asynctask 类中的另一个类调用视图,但它似乎不起作用。

这是我的 AsyncTack

private class parseSite extends AsyncTask<String, Void, List<Integer>> {

    protected List<Integer> doInBackground(String... arg) {
     List<Integer> output = new ArrayList<Integer>();
        try {
            htmlHelper hh = new htmlHelper(new URL(arg[0]));
            output = hh.htmlHelper(arg[0]);
        } catch (Exception e) {
            System.out.println("Error");
        }
        return output;
    }

    protected void onPostExecute(List<Integer> exe) {

        graph salesView = new graph();
        View chartView = salesView.getView(this);
        chartView.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.FILL_PARENT, 1f));
        LinearLayout layout = (LinearLayout) findViewById(R.id.linearview);

        layout.addView(chartView, 0);

    }
}

这是活动“图表”的样子

public class graph {

public View getView(Context context) (...etc.)

我不明白为什么它不能调用视图。

4

2 回答 2

1

我认为问题在于您尝试从创建它的其他线程访问视图。通常的方法是使用runOnUiThread()

(activity).runOnUiThread(new Runnable() {
     public void run() {

 //call anything to your View objects

    }
});
于 2013-01-17T21:21:32.040 回答
1

假设您打算graphContext某种方式扩展,例如通过扩展Activity,并且parseSite在内部定义graph,请进行以下更改:

View chartView = salesView.getView(graph.this);

在原始代码中,this指的parseSite是未扩展的Context(并且不是graph您可能想要的)。

附带说明一下,在典型的 Java 风格中,类应该用大写字母命名,即Graphnot graph

于 2013-01-17T21:09:47.717 回答