AsyncTask不是通用的?
当我尝试编译为以下代码时,出现两个错误:
描述资源路径位置类型语法错误标记“void”,无效表达式AsyncTask.java / AsyncTask项目/ src / org / me / asynctask第19行Java问题
说明资源路径位置类型类型AsyncTask不是通用的; 它不能用参数进行参数化AsyncTask.java / AsyncTask Project / src / org / me / asynctask第25行Java问题
包org.me.asynctask;
导入android.app.Activity; import android.content.Context; 导入android.os.Bundle; 导入android.widget.TextView; 导入android.widget.Toast; 导入android.os。*; 公共类AsyncTask扩展活动{/ **首次创建活动时调用。 * / @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 ...),为什么我会得到这些错误?
有几个问题,其中两个是:
您定义了一个类AsyncTask
,它隐藏/碰撞了android.os.AsyncTask
。 也许你打算把它称为AsyncTaskDemo.java或AsyncTaskActivity.java或其他东西。
你试图通过在doInBackground
调用tv.setText
从后台线程中改变UI。 这打破了AsyncTask
的目的。 doInBackground
代码不应触及主(或“UI”)线程。 对于doInBackground
中的中间任务更新,请使用AsyncTask.publishProgress
。
您正在使用错误的类型重写AsyncTask方法。 它被定义为:
AsyncTask<Params, Progress, Result>
并且doInBackground方法被定义为受保护的抽象结果doInBackground(Params ... params)
所以根据你的定义,你应该保护Void doInBackround(TextView ... params);
onPostExecute也被错误地定义。
链接地址: http://www.djcxy.com/p/26213.html