2014-09-29 3 views
-1

Мое приложение для Android должно связываться с сервером. Таким образом, действие создает намерение и запускает производное IntentService.Android: Почему ссылка ResultReceiver исчезает?

После некоторых советов, таких как this one, я продлил запрос ResultReceiver для ответа: . Моя активность реализует содержащийся интерфейс приемника (таким образом реализует onReceiveResult).

public class MyResultDistributor extends ResultReceiver { 

// Class instances serves one purpose: To remember who gets the answer. 
private Receiver mReceiver; 

// Constructor: Apparently, the "handler" determines in which thread the result handling is done. 
public MytResultDistributor(Handler handler) { 
    super(handler); 
} 

// This is what the receiver of request answers has to implement. 
public interface Receiver { 
    public void onReceiveResult(int resultCode, Bundle resultData); 
} 

// Allows to clarify who is the receiver of request results. 
public void setReceiver(Receiver receiver) { 
    if (receiver != null) { 
     Log.d(this.getClass().toString(), "Setting receiver."); 
    } else { 
     Log.d(this.getClass().toString(), "Unsetting receiver."); 
    } 
    this.mReceiver = receiver; 
    if (this.mReceiver != null) { 
     Log.d(this.getClass().toString(), "Set receiver."); 
    } else { 
     Log.d(this.getClass().toString(), "Unset receiver."); 
    } 
} 

@Override 
protected void onReceiveResult(int resultCode, Bundle resultData) { 
    // Anybody interested in the results? Well, then feel free to take them. 
    Log.d(this.getClass().toString(), "Got result."); 
    if (this.mReceiver != null) { 
     Log.d(this.getClass().toString(), "Distributing result."); 
     this.mReceiver.onReceiveResult(resultCode, resultData); 
    } else { 
     Log.d(this.getClass().toString(), "No receiver there."); 
    } 
} 

Активность создает экземпляр этого, и устанавливает себя в качестве приемника (выдержка):

public class MainActivity extends Activity implements MyResultDistributor.Receiver { 

public MyResultDistributor mDistributor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.v(this.getClass().toString(), "onCreate"); 
    setContentView(R.layout.activity_main); 

    mDistributor = new MyResultDistributor(new Handler()); 
    mDistributor.setReceiver(this); 

    (...) 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    Log.v(this.getClass().toString(), "onPause"); 
    mDistributor.setReceiver(null); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    Log.v(this.getClass().toString(), "onResume"); 
    mDistributor.setReceiver(this); 
} 

(...) 

Теперь, когда я бегу деятельность, начать свою службу, и она возвращает результат, его похоже mReceiver - null. Но я не вижу, где он установлен в null в журнале! ??

Вход отрывок:

onCreate 
Setting receiver. 
Set receiver. 
onResume 
Setting receiver. 
Set receiver. 
Request Service was created. 
Request Service has got an Intent. 
Server answer: auth 
Authenticated! 
Got result. 
No receiver there. 

где последние 5 сообщений имеют различные TID.

Почему приемник отображается в одном методе и не установлен в другом? У меня проблема с потоком? Возможно, что-то случилось с помощью new Handler()?

Благодарим за любые советы!

ответ

1

OK Я думаю, что нашел свою ошибку: Я как-то передал неправильный приемник моему IntentService - так что экземпляр, который я наблюдал, был другим. Извините за этот неразрешимый вопрос ... (так как эта часть кода не отображалась.).

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