Annoyomous クラスの Thread にいることでコンテキストを変更しましたが、this
これは外部クラスではなく、あなたの Annonomous クラスです。
これを試してください(しゃれが意図されています):
task.setOnPreExecuteListener(YourOuterClass.this);
task.setOnDoneListener(YourOuterClass.this);
すなわち
public class YourClass implements OnDoneListener {
public doFacebook(){
new Thread(new Runnable(){
@Override
public void run(){
task.setOnDoneListener(YourClass.this);
}
}.start();
}
@Override
public void onDone(){
}
}
または、スレッド化されたクラスを引き出します。
public class DoSomething implements Runnable {
private final OnDoneListener listener;
public DoSomething(OnDoneListener listener){
this.listener = listener;
}
@Override
public void run(){
FacebookConnectTask task = ... ;
task.setOnDoneListener(listener);
}
}
public class YourActivity extends Activity implements OnDoneListener {
public void onCreate(Bundle b){
new Thread(new DoSomething(this)).start();
}
@Override
public void onDone(){
// Tada
}
}
よりクールになりたい場合のさらなるステップは、独自のインターフェイスを作成し、すべての Facebook のものを実行可能なクラスに保持することです。
public class DoSomething implements Runnable, OnDoneListener {
public interface OnFacebookFinished {
void onFacebookFinished();
}
private final OnFacebookFinished listener;
public DoSomething(OnFacebookFinished listener){
this.listener = listener;
}
@Override
public void run(){
FacebookConnectTask task = ... ;
task.setOnDoneListener(this);
}
@Override
public void onDone(){
if(listener != null){
listener.onFacebookFinished();
}
}
}
public class YourActivity extends Activity implements OnFacebookFinished {
@Override
public void onCreate(Bundle b){
new Thread(new DoSomething(this)).start();
}
@Override
public void onFacebookFinished(){
// Tada
}
}