我需要连接到Facebook,因此我在使用网络时使用胎面。但是我有一个问题:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
FacebookConnectTask task = new FacebookConnectTask("facebookId", "token", "email", facebookGender,0, 0);
task.setOnPreExecuteListener(this);
task.setOnDoneListener(this);
task.execute();
}
});
t.start();
}
我不能做
task.setOnPreExecuteListener(this);
task.setOnDoneListener(this);
eclipse给我这个错误:"类型任务中的方法setOndOnelistener(task.ondonelistener)不适用于参数(new runnable(){})"
我该如何修复?
谢谢!
您已经通过在烦人的类中在线程中更改了上下文,this
现在是您的nonnansolous类而不是外部类。
尝试这个(双关语):
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
}
}