从我的异步线程调用活动类中的方法

时间:2012-11-05 13:05:07

标签: java android

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

4 个答案:

答案 0 :(得分:4)

您应该使用具有单一方法的界面:here&#34; setFilters&#34; 您的活动应该实现此接口,并且您的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);      
}     
}

答案 1 :(得分: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;
}

答案 2 :(得分:1)

这是因为Activity接口没有定义setFilter函数。

您应该在界面中定义它,并让您的Activity实现这一个。

答案 3 :(得分:-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);      
    }     
}