2010-07-18 53 views
0

当我尝试编译为下面的代码,我得到两个错误:令牌AsyncTask不通用?

描述资源路径位置类型 语法错误“无效的”,无效表达AsyncTask.java /的AsyncTask项目/ src目录/组织/我/的AsyncTask第19行Java问题

说明资源路径位置类型 AsyncTask类型不是通用的;它不能用参数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。*; 公共类AsyncTask extends Activity第一次创建活动时调用。 */ @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...)所以为什么我得到这些错误

回答

3

有几个问题,其中两个是:

  1. 您定义的类AsyncTask,隐藏与android.os.AsyncTask /碰撞。也许你打算把它称为AsyncTaskDemo.java或AsyncTaskActivity.java或其他东西。

  2. 您正试图通过调用doInBackground中的tv.setText来从后台线程更改UI。这违背了AsyncTask的目的。 doInBackground中的代码不应触及主(或“UI”)线程。对于doInBackground内部的中间任务更新,请使用AsyncTask.publishProgress

5

要覆盖了错误的类型的AsyncTask方法它被定义为:?

AsyncTask<Params, Progress, Result> 

和doInBackground方法定义为 受保护的抽象结果doInBackground(Params ... params)

因此根据您的定义,你应该有 protected void void doInBackround(TextView ... params);

onPostExecute也被错误地定义。