Java 构造函数MainActivity.MyTask(TextView)未定义
我收到一个错误,说明:构造函数MainActivity.MyTask(TextView)在遵循另一个SO用户关于如何修复基于Android的web scraper的建议后未定义: 我试图创建一个构造函数: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
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>