2012-11-05 32 views
0
public class AycanClass extends AsyncTask<String, Void, String> implements IAppointments { 

    Activity activity; 

    public AycanClass(Activity activity){ 
     this.activity = activity; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      activity.setFilters(value);  
    }  
} 

现在在我的MainActivity类中,我有这样的方法。从我的异步线程调用活动类中的方法

public void setFilters(String result){ 

} 

我无法调用此方法。

The method setFilters(result) is undefined for the type Activity 

回答

2

编辑:使您的活动实现一个包含该方法的接口。

public interface FilterableActivity { 
public void setFilters(String result); 
} 

而且活动应该是这样的:

public class MainActivity extends Activity implements FilterableActivity { 

... 
public void setFilters(String result){ 

} 
} 

而只是通过一个FilterableActivity作为参数传递给的AsyncTask。

public AycanClass(FilterableActivity activity){ 
    this.activity = activity; 
} 
+0

+1是的,所以在这种情况下它的'MainActivity' – Hunt

+0

不确定这是最好的扩展方法。你应该使用一个接口。 – abecker

+1

好吧,您只需复制/粘贴我的答案;) – abecker

-1
public class AycanClass extends AsyncTask<String, Void, String> implements IAppointments { 

    Activity activity; 
    MainActivity mainactivityobjectname; 

    public AycanClass(Activity activity){ 
     this.activity = activity; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      mainactivityobjectname.setFilters(value);  
    }  
} 
+1

无用的信息,而不解释为什么它不起作用。此外mainactivityobjectname从未设置。 – RvdK

+0

我将重申:提问者(以及其他人阅读这个问题)总是想知道:问题出现的原因以及如何解决问题。如果你只是在没有任何解释的情况下发布一些代码并且不完整,它不会有任何好处 – RvdK

+0

@PoweRoy昨天我很抱歉,我在这里遇到了麻烦。 。 。 –

1

这是因为活动接口不具有使用setfilter函数来定义。

你应该在一个接口中定义它,让你的Activity实现这个。

4

您应该使用单一方法的接口:这里“setFilters” 您的活动应该实现此接口,并且您的asynctask构造函数将要求您的接口实例。

public interface ISetFiltersInterface{ 
public void setFilters(List<Filter>); 
} 

public class MyActivity extends Activity implements ISetFiltersInterface{ 
... 
    public void setFilters(List<Filter>){ 
     //TODO 
} 
} 

public class AycanClass extends AsyncTask<String, Void, String> implements IAppointments { 

ISetFiltersInterface delegate; 

public AycanClass(ISetFiltersInterface delegate){ 
    this.delegate = delegate; 
} 

@Override 
protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     delegate.setFilters(value);  
}  
}