当我尝试编译为以下代码时,我收到两个错误:
描述资源路径位置类型
令牌“void”上的语法错误,无效的表达式AsyncTask.java /AsyncTask Project/src/org/me/asynctask
第19行Java问题
描述资源路径位置类型
类型AsyncTask
不是通用的;它不能用参数<TextView, Void, Void> AsyncTask.java /AsyncTask Project/src/org/me/asynctask
第25行Java问题
package org.me.asynctask;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.os.*;
public class AsyncTask extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView mytextview = new TextView(this);
TextView secondtextview = new TextView(this);
new MyAsyncClass().execute(mytextview, void, secondtextview);
}
private class MyAsyncClass extends AsyncTask<TextView, Void, Void> {
protected TextView doInBackground(TextView tv)
{
tv.setText("Your AsyncTask was successful!");
return tv;
}
protected void onPostExecute(TextView Result)
{
Context context = context.getApplicationContext();
Toast mytoast = Toast.makeText(context, "AsyncTask processing complete", Toast.LENGTH_LONG);
mytoast.show();
}
}
显然AsyncTask
是通用的http://developer.android.com/reference/android/os/AsyncTask.html#execute(Params...),为什么我会收到这些错误?
答案 0 :(得分:5)
您使用错误的类型覆盖AsyncTask方法。它被定义为:
AsyncTask<Params, Progress, Result>
并且doInBackground方法定义为 受保护的抽象结果doInBackground(Params ... params)
所以根据你的定义,你应该有 protected Void doInBackround(TextView ... params);
onPostExecute也未正确定义。
答案 1 :(得分:3)
有几个问题,其中两个是:
您定义了一个类AsyncTask
,它隐藏/与android.os.AsyncTask
发生冲突。也许您打算将其称为AsyncTaskDemo.java或AsyncTaskActivity.java等。
您正在尝试通过调用tv.setText
内的doInBackground
来更改后台线程中的UI。这违背了AsyncTask
的目的。 doInBackground
中的代码不应该触及主(或'UI')线程。对于doInBackground
内的任务中期更新,请使用AsyncTask.publishProgress
。