2013-03-09 2 views
1

Я в процессе разбивки проекта Android в проект библиотеки + несколько зависимых проектов и столкнулся с этой проблемой.Проект библиотеки Android: вызов метода внутреннего класса

Проект библиотеки имеет Android Service определяется следующим образом:

public class UserService extends Service { 

    public class LocalBinder extends Binder { 
     UserService getService() { 
      return UserService.this; 
     } 
    } 
    ... 
} 

Зависимый проект делает вызов метода внутреннего класса Service как это:

public ServiceConnection mConnection = new ServiceConnection() { 

    public void onServiceConnected(ComponentName className, IBinder service) { 
     LocalBinder binder = (LocalBinder) service; 
     mService = binder.getService(); 
     mBound = true;    
    } 
    ... 
}; 

это работает отлично, когда все в одном проекте. Но после того, как я переехал службу в проект библиотеки, она дает ошибку времени компиляции:

The method getService() from the type UserService.LocalBinder is not visible 

Что мне нужно изменить, чтобы сделать его компиляцию?

ответ

4

Ваш метод не имеет модификатора видимости, поэтому он доступен только для классов в одном пакете. Сделать это общественность, чтобы сделать его доступным для любого другого класса:

public UserService getService() { 
     return UserService.this; 
    } 

Читайте the Java tutorial, чтобы узнать о модификаторов видимости.

+0

Спасибо за быстрый ответ. Я пробовал это, но он все равно дает ту же ошибку. – gcl1

+0

У меня есть исходный код для работы снова. У меня была еще одна проблема, связанная с преобразованием проекта библиотеки, как описано здесь: http://stackoverflow.com/questions/8476912/menu-item-ids-in-an-android-library-project. Когда я исправил это, эта ошибка исчезла - не знаю, почему и как они связаны, но в любом случае спасибо. – gcl1

+0

Спасибо за ответ. :) –

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