2012-11-05 30 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);  
}  
}