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

    上一篇: AsyncTask not generic?

    下一篇: How to manage `startActivityForResult` on Android?