我的通话活动:
public class Hello extends Activity {
public void onCreate(Bundle savedInstanceState) {
MyTask mt = new MyTask(this);
mt.execute();
}
现在在MyTask(外部类)中:
public class MyTask extends AsyncTask<Void, Void, Void> {
private Context mContext;
public MyTask(Context context) {
mContext = context;
}
//doinbackground, etc
protected void onPostExecute() {
mContext.finish();
}
如果我删除上面的mContext.finish()
,其他内容正在按预期工作
但是如果我正在调用mContext.finish()
,我会收到一个错误:The method finish() is undefined for the type Context
(当我编写mContext时,Eclipse没有显示finish()。这表明我错误地使用了finish()。 )
Hello
完成任务后,我需要做什么才能完成调用活动MyTask
答案 0 :(得分:20)
((Activity)mContext).finish();
将Context
投射到Activity
并调用其finish()
方法的正确方法。不确定为什么你想要从Activity
完成AsyncTask
而不是
答案 1 :(得分:16)
你可以尝试做什么而不是调用context.finish(),为什么不做这样的回调接口:
public interface TaskCallback{
void done();
}
然后将其实施到您的活动
中public Hello extends Activity implements TaskCallback{
.....BUNCH OF ACTIVITY CODE.....
public void onCreate(Bundle savedInstanceState) {
MyTask mt = new MyTask(this);
mt.execute();
}
public void done() {
finish();
}
}
而不是将Context作为参数,而是使用TaskCallback
public class MyTask extends AsyncTask<Void, Void, Void> {
private TaskCallback mCallback;
public MyTask(TaskCallback callback) {
mCallback = callback;
}
//doinbackground, etc
protected void onPostExecute() {
mCallback.done();
}
你去了,它为你提供了更多的灵活性来定制每个实现。
答案 2 :(得分:3)
我遇到了同样的情况,然后我做了如下:
public class MyTask extends AsyncTask<Void, Void, Void> {
private Activity mActivity;
private Context mContext;
public MyTask(Activity activity) {
mActivity = activity;
mContext = mActivity.getApplicationContext();
}
//doinbackground, etc
protected void onPostExecute() {
mActivity.finish();
}
希望有所帮助:)
答案 3 :(得分:2)
在您的活动类中定义一个方法,如下所示:
public void FinishAfterAsyncTask()
{
this.finish();
}
并从OnPostExecute
类的AsynTask
方法调用此方法。
答案 4 :(得分:1)
您可以创建一个从公共扩展的新的私有AsyncTask。
在这个私有的AsyncTask中,你可以访问Activity的东西,你可以覆盖onPostExecute方法来完成它。
您真正的AsyncTask
public class MyPublicAsyncTask extends AsyncTask<Void, Void, Void> {
Context context;
public GetHorariosAsyncTask(Context ctx){
context = ctx;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// prepare yourself for an async work
}
@Override
protected Void doInBackground(Void... params) {
// Do yout cool async stuff
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// you're finish, let's tell to user
}
}
您使用私有AsyncTask的活动
public class MyActivity extends Activity {
Activity mAct;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mAct = this;
}
private class MyPrivateAsyncTask extends MyPublicAsyncTask {
public MyPrivateAsyncTask(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// our async task is completed! let's take care of this activity
mAct.finish();
}
}
}
答案 5 :(得分:-4)
你能试试吗
this.finish()
似乎是因为使用mContext调用它,它表示未定义。