2012-12-28 2 views
1

Мне нужно подключиться к facebook, поэтому я использую Протектор при использовании сети. но у меня есть проблема:Не могу подключиться к 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); 

затмения дает мне эту ошибку: «Метод setOnDoneListener (Task.OnDoneListener) в задаче типа не применимый для аргументов (new Runnable() {}) "

Как я могу это исправить?

Спасибо!

+0

Что такое _setOnDoneListener_ подпись? – sinisha

ответ

1

Вы изменили контекст, находясь в потоке своего в классе Annoyomous, this теперь является вашим автономным классом, а не внешним классом.

Постарайтесь это (каламбур):

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 в классе runnable:

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 
    } 

} 
+0

@roiberg, на которого вы идете? :-) – Blundell

Смежные вопросы