Java 构造函数MainActivity.MyTask(TextView)未定义

Java 构造函数MainActivity.MyTask(TextView)未定义,java,android,constructor,Java,Android,Constructor,我收到一个错误,说明:构造函数MainActivity.MyTask(TextView)在遵循另一个SO用户关于如何修复基于Android的web scraper的建议后未定义: 我试图创建一个构造函数: public MyTask(TextView tv) { // TODO Auto-generated constructor stub } 但是,这似乎并不能解决问题(错误消失了,但textview从未更新) 错误: The constructor MainActivity.My

我收到一个错误,说明:构造函数MainActivity.MyTask(TextView)在遵循另一个SO用户关于如何修复基于Android的web scraper的建议后未定义:

我试图创建一个构造函数:

public MyTask(TextView tv) {
    // TODO Auto-generated constructor stub
}
但是,这似乎并不能解决问题(错误消失了,但textview从未更新)

错误:

The constructor MainActivity.MyTask(TextView) is undefined 
资料来源:

public class MainActivity extends Activity {

    TextView tv;
    final String URL = "http://news.google.com";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.TextView01);
        new MyTask(tv).execute(URL);
    }

    private class MyTask extends AsyncTask<String, Void, String> {
        ProgressDialog prog;
        String title = "";

        @Override
        protected void onPreExecute() {
            prog = new ProgressDialog(MainActivity.this);
            prog.setMessage("Loading....");
            prog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                Document doc = Jsoup.connect(params[0]).get();
                Element tableHeader = doc.select("tr").first();

                for (Element element : tableHeader.children()) {
                    // Here you can do something with each element
                    System.out.println(element.text());
                    tv.setText(element.text());
                }

                title = doc.title();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return title;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            prog.dismiss();
            tv.setText(result);
        }
    }
}
公共类MainActivity扩展活动{
文本视图电视;
最终字符串URL=”http://news.google.com";
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.TextView01);
新建MyTask(tv).execute(URL);
}
私有类MyTask扩展了AsyncTask{
进程对话程序;
字符串标题=”;
@凌驾
受保护的void onPreExecute(){
prog=新建进度对话框(MainActivity.this);
程序设置消息(“加载…”);
prog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
Document doc=Jsoup.connect(参数[0]).get();
元素tableHeader=doc.select(“tr”).first();
for(元素:tableHeader.children()){
//在这里,您可以对每个元素执行一些操作
System.out.println(element.text());
tv.setText(element.text());
}
title=doc.title();
}捕获(IOE异常){
e、 printStackTrace();
}
返回标题;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
程序解除();
tv.setText(结果);
}
}
}
根据Raghunandan的回答进行编辑:

public class MainActivity extends Activity {
    Context context;

    TextView tv;
    final String URL = "http://news.google.com";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.TextView01);
        new MyTask().execute(URL);
    }

    private class MyTask extends AsyncTask<String, Void, String> {
        ProgressDialog prog;
        String title = "";

        @Override
        protected void onPreExecute() {
            prog = new ProgressDialog(MainActivity.this);
            prog.setMessage("Loading....");
            prog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                Document doc = Jsoup.connect(params[0]).get();
                Element tableHeader = doc.select("tr").first();

                for (Element element : tableHeader.children()) {
                    // Here you can do something with each element
                    // System.out.println(element.text());
                    // tv.setText(element.text());
                    // //cannot update ui here.
                    // use Log.i instead of System.out.println
                }

                title = doc.title();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return value;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            prog.dismiss();
            // tv.setText(result);
            Document doc = Jsoup.connect(params[0]).get();
            Element tableHeader = doc.select("tr").first();

            for (Element element : tableHeader.children()) {
                // Here you can do something with each element
                System.out.println(element.text());
                tv.setText(element.text());
                // cannot update ui here.

            }
        }
    }
}
公共类MainActivity扩展活动{
语境;
文本视图电视;
最终字符串URL=”http://news.google.com";
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.TextView01);
新建MyTask().execute(URL);
}
私有类MyTask扩展了AsyncTask{
进程对话程序;
字符串标题=”;
@凌驾
受保护的void onPreExecute(){
prog=新建进度对话框(MainActivity.this);
程序设置消息(“加载…”);
prog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
Document doc=Jsoup.connect(参数[0]).get();
元素tableHeader=doc.select(“tr”).first();
for(元素:tableHeader.children()){
//在这里,您可以对每个元素执行一些操作
//System.out.println(element.text());
//tv.setText(element.text());
////此处无法更新ui。
//使用Log.i而不是System.out.println
}
title=doc.title();
}捕获(IOE异常){
e、 printStackTrace();
}
返回值;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
程序解除();
//tv.setText(结果);
Document doc=Jsoup.connect(参数[0]).get();
元素tableHeader=doc.select(“tr”).first();
for(元素:tableHeader.children()){
//在这里,您可以对每个元素执行一些操作
System.out.println(element.text());
tv.setText(element.text());
//无法在此更新ui。
}
}
}
}
您有这个

  new MyTask(tv).execute(URL);
但是在你的asycntask中,你没有类似的构造函数

  public MyTask(TextView tv)
  {

  }
如果asynctask是活动类的内部类,则无需将textview传递给构造函数,因为您已将textview声明为活动类成员

您可以在
onPostExecute
中设置文本。但是您正在
doInbackground
中设置文本

doInbackground
在后台线程上调用。所以不能在那里设置文本。您需要在ui线程上更新ui

如果asynctask不是内部类,则使用接口

编辑:

公共类MainActivity扩展活动{
语境;
ArrayList aa=新的ArrayList();
ListView lv;
最终字符串URL=”http://news.google.com";
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
新建MyTask().execute(URL);
}
私有类MyTask扩展了AsyncTask{
进程对话程序;
字符串标题=”;
@凌驾
受保护的void onPreExecute(){
prog=新建进度对话框(MainActivity.this);
程序设置消息(“加载…”);
prog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
Document doc=Jsoup.connect(参数[0]).get();
元素tableHeader=doc.select(“tr”).first();
for(元素:tableHeader.children()){
aa.add(element.text().toString());
}
title=doc.title();
}捕获(IOE异常){
e、 printStackTrace();
}
    public class MainActivity extends Activity {
        Context context;

            TextView tv;
            final String URL = "http://news.google.com";

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                tv = (TextView) findViewById(R.id.textView1);
                new MyTask().execute(URL);
            }

            private class MyTask extends AsyncTask<String, Void, String> {
                ProgressDialog prog;
                String title = "";

                @Override
                protected void onPreExecute() {
                    prog = new ProgressDialog(MainActivity.this);
                    prog.setMessage("Loading....");
                    prog.show();
                }

                @Override
                protected String doInBackground(String... params) {
                    try {
                        Document doc = Jsoup.connect(params[0]).get();
                        Element tableHeader = doc.select("tr").first();

                        for (Element element : tableHeader.children()) {
                            // Here you can do something with each element
                            //System.out.println(element.text());
                            //tv.setText(element.text());
                            //cannot update ui here. 
                            // use Log.i instead of System.out.println
                        }

                        title = doc.title();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return title;
                }

                @Override
                protected void onPostExecute(String result) {
                    super.onPostExecute(result);
                    prog.dismiss();
                    tv.setText(result);
                }
            }
        }
http://developer.android.com/reference/android/os/AsyncTask.html
public class MainActivity extends Activity {
    Context context;
    ArrayList<String> aa = new ArrayList<String>();
        ListView lv;
        final String URL = "http://news.google.com";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lv= (ListView) findViewById(R.id.listView1);
            new MyTask().execute(URL);
        }

        private class MyTask extends AsyncTask<String, Void, String> {
            ProgressDialog prog;
            String title = "";

            @Override
            protected void onPreExecute() {
                prog = new ProgressDialog(MainActivity.this);
                prog.setMessage("Loading....");
                prog.show();
            }

            @Override
            protected String doInBackground(String... params) {
                try {
                    Document doc = Jsoup.connect(params[0]).get();
                    Element tableHeader = doc.select("tr").first();

                    for (Element element : tableHeader.children()) {
                        aa.add(element.text().toString());
                    }

                    title = doc.title();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return title;
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                prog.dismiss();
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,aa);
                lv.setAdapter(adapter);
            }
        }
    }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>