Как вызвать функцию основного потока из Сервиса на андроид? - PullRequest
0 голосов
/ 03 апреля 2011

У меня есть Основной класс, и он содержит функцию isSyncAllowed.Я запускаю другой сервис.Как вызвать функцию isSyncAllowed из этого сервиса?Там написано:

Невозможно сделать статическую ссылку на нестатический метод isSyncAllowed (Boolean) типа Main

Если я изменю тип этой функции на static и пройти context, я прихожу к проблеме, что startManagingCursor не может быть статичным.

Как это исправить?

Upd.Вот код SyncService :

public class SyncService extends BroadcastReceiver {
...
    public void onReceive(Context context, Intent intent) {
    ...
    Boolean isDownloadAllowed = Kinobaza.isSyncAllowed(true);
    }

, а вот код Main :

public class Kinobaza extends ListActivity {
    ...
    public static Boolean isSyncAllowed(Boolean showToasts) {
        ...
        Cursor notesCursor = mDbHelper.fetchAllNotes();
        startManagingCursor(notesCursor); // here is the error
    }
}

1 Ответ

1 голос
/ 03 апреля 2011

Вы, вероятно, делаете Main.isSyncAllowed(...) вместо main.isSyncAllowed(...), где main является объектом класса Main.

Если вы находитесь внутри метода экземпляра Main, тогда вы можете просто сделать isSyncAllowed(...).

Edit - теперь, когда я вижу ваш код, вы, вероятно, должны передать isSyncAllowed через Intent, который вы передаете службе. Когда вы запускаете сервис:

Intent intent = /* however you were constructing your intent */
boolean syncAllowed = /* calculate syncAllowed by calling your existing method */
intent.putExtra("syncAllowed", syncAllowed);
    ...

и затем в вашем сервисе вы можете получить его:

boolean syncAllowed = getIntent().getBooleanExtra("syncAllowed", true);

Ваша служба не должна вызывать методы экземпляра для ваших действий.

...