I have the exact same problem. I get a NullPointerException when I want to
extract the service with a specific serviceReference:
ref = bc.getServiceReference(sb[j].toString());
Log.d("REF", ref.toString());
Object service = bc.getService(ref);
It does not even get to the 3rd line of code... Does anybody have an idea
why? The service appears to be registered.
pablomj wrote:
>
> Well, I learned that the EnglishDictionary.jar bundle it is installed
> (also Spellchecker and FrenchDictionary) because I obtained all bundles of
> the bundlecontext of felix.
> And I extracted the registered services of this bundles with:
>
> ServiceReference[] sb=bc.getBundles()[i].getRegisteredServices();
>
> Printing with:
>
> Log.d("FELIX","registered services: "+sb[j].toString());
>
> I obtain:
> 02-18 17:40:41.818: DEBUG/FELIX(847): registered services:
> [tutorial.example2.service.DictionaryService]
>
> It's a good new. Now...I want instanciate this service ...but I can't
> instanciate a "DictionaryService" object :(. Some comment? I continue with
> this, slowly but with energy.
>
>
> Best Regards,
> Pablo.
>
>
>
>
>
> pablomj wrote:
>>
>> Good day, I have good and bad news.
>>
>> Firts, Clement thanks, exactly it is need to add in the manifest file the
>> line:
>> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
>> />
>>
>> But, it is not enough if you are proving in a emulator. In this case, you
>> need emulate an sdcard because if you don't make this you will not have
>> permissions in the sdcard. So, if someday you have this problem, you must
>> write in console in sdk path/tools:
>>
>> mksdcard 64M mySDCard (this creates the sdcard)
>> android create avd -n nombre -t 4 (this creates an emulator)
>> emulator -avd nombre -sdcard mySDCard (this launches the emulator with
>> the sdcard)
>>
>> At this moment, you can create and push files in sdcard. Now, in my case
>> is important don't forget make the push collectionOfJarsFiles in this new
>> emulator with
>> adb push C:\EclipseDevelopment\ApacheFelix\Apache_felix_demo\bundle
>> /data/felix
>>
>>
>> Well, the bad news are that...now I can install a bundle but I think this
>> is wrong.
>>
>> I put here the modified code provided by Bruce:
>>
>> void launchFelix()
>> {
>> Log.d("Felix", "About to start Felix...");
>> // Create a configuration property map
>> String cacheDir = null;
>> try
>> {
>> cacheDir = File.createTempFile("skifta", ".tmp").getParent();
>> }
>> catch (IOException e)
>> {
>> Log.d("Felix", "unable to create temp file", e);
>> return;
>> }
>>
>> Map configMap = new StringMap(false);
>> configMap.put("org.osgi.framework.storage", cacheDir);
>> configMap.put("felix.embedded.execution", "true");
>> configMap.put("org.osgi.service.http.port", "9990");
>> configMap.put("org.osgi.framework.startlevel.beginning", "5");
>>
>> try
>> {
>> // Now create an instance of the framework with
>> // our configuration properties.
>> m_felix = new Felix(configMap);
>> // Now start Felix instance.
>> m_felix.start();
>> Log.d("Felix", "Felix is started");
>>
>> BundleContext bc=m_felix.getBundleContext();
>> bc.installBundle("file:/data/felix/EnglishDictionary.jar");
>>
>>
>> for(org.osgi.framework.Bundle b :
>> m_felix.getBundleContext().getBundles())
>> {
>> b.start();
>> Log.d("Felix", "Bundle: " + b.getSymbolicName());
>> }
>> }
>> catch (Throwable ex)
>> {
>> Log.d("Felix","Could not create framework: " +
>> ex.getMessage(), ex);
>> }
>> }
>>
>>
>> Well, the install is it made without problems, program don't jumps to the
>> catch. So, I make install of the EnglishDictionary.jar. But, then, when I
>> iterate in the for, the b.start() is also made, but I think that I am
>> doing something wrong because b.getSymbolicName() "null".
>>
>> So, what do you think?The bundle is installed?I installed a void bundle?I
>> made something wrong?
>>
>> Salutations and thanks for everyone.
>> Pablo Muñoz.
>>
>>
>>
>> clement escoffier wrote:
>>>
>>> Hi,
>>>
>>>
>>>
>>> On 16.02.2010, at 19:20, pablomj wrote:
>>>
>>>>
>>>> Hi everyone, I know what is my current problem.
>>>>
>>>> the problem is in this try
>>>>
>>>> void launchFelix()
>>>> {
>>>> Log.d("Felix", "About to start Felix...");
>>>> // Create a configuration property map
>>>> String cacheDir = null;
>>>> //String FELIX_CACHE_DIR =
>>>> "/data/data/net.luminis.android.felix/cache";
>>>> try {
>>>> cacheDir = File.createTempFile("skifta",
>>>> ".tmp").getParent();
>>>> } catch (IOException e) {
>>>> Log.d("Felix", "unable to create temp file", e);
>>>> return;
>>>> }
>>>> .
>>>> .
>>>> .
>>>>
>>>> Because I don't have permissions to write in the /sdcard directory of
>>>> the
>>>> emulator. So, the program can't create the temp file.
>>>>
>>>> somebody knows how I can add permissions to this directory?
>>>> Thanks.
>>>
>>> Recent Android version have introduced a permission to write on the
>>> sdcard
>>> Add this line to your manifest:
>>> <uses-permission
>>> android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
>>>
>>> Moreover, check that you have created an AVD with an SDCARD.
>>>
>>> Regards,
>>>
>>> Clement
>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> clement escoffier wrote:
>>>>>
>>>>>
>>>>> On 15.02.2010, at 18:56, pablomj wrote:
>>>>>
>>>>>>
>>>>>> Hi everyone, here are my advances,
>>>>>>
>>>>>> I reviewed all steps, I can instanciate a Felix object like in your
>>>>>> example.
>>>>>> It was a problem with dependencies.
>>>>>>
>>>>>> Proving for install for start and stop a bundle I made in the code:
>>>>>>
>>>>>> BundleContext newBundle = m_felix.getBundleContext();
>>>>>> bb.installBundle(pathOfTheBundle);
>>>>>>
>>>>>> When...now my problem is this pathOfTheBundle, I tried put in
>>>>>> pathOfTheBundle "/data/felix/EnglishDictionary.jar" (location where I
>>>>>> put
>>>>>> this bundle with adb push ..... in console )and some variants, but
>>>>>> always
>>>>>> is
>>>>>> an wrong path. What I must express my bundle location?
>>>>>>
>>>>>> Can anybody help me? Thanks again.
>>>>>
>>>>> Try with: file:/data/felix//EnglishDictionary.jar.
>>>>>
>>>>> Be also aware that this location is not available on regular devices.
>>>>> For
>>>>> such kind of manipulation, you should use the external storage
>>>>> (generally
>>>>> /sdcard, but use the Environment class to get the root). (you can also
>>>>> use
>>>>> the internal application assets).
>>>>>
>>>>> Regards,
>>>>>
>>>>> Clement
>>>>>
>>>>>>
>>>>>> Regards, Pablo.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Jackson, Bruce wrote:
>>>>>>>
>>>>>>> Yes, you can.
>>>>>>>
>>>>>>> In the code I sent you, you'll see that you can get a handle to the
>>>>>>> BundleContext for the framework itself. From this you can then call:
>>>>>>>
>>>>>>> context.installBundle(String location);
>>>>>>>
>>>>>>> to install your own bundles.
>>>>>>>
>>>>>>>
>>>>>>> On 12/02/2010 15:07, "pablomj" <[email protected]> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> Oh, thanks Bruce and Karl for your comments.
>>>>>>>>
>>>>>>>> I did something wrong, because I can't instanciate an "Felix"
>>>>>>>> object.
>>>>>>>> So,
>>>>>>>> I
>>>>>>>> am going to review all steps...
>>>>>>>>
>>>>>>>> Although I don't see running this yet, I will can start and stop
>>>>>>>> bundles
>>>>>>>> from my Android application? I excited to view this!
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Pablo.
>>>>>>>>
>>>>>>>>
>>>>>>>> Karl Pauls wrote:
>>>>>>>>>
>>>>>>>>> Why would you need 1.5 to be able to dex the bundle (the framework
>>>>>>>>> itself is build for 1.3 btw.)?
>>>>>>>>>
>>>>>>>>> regards,
>>>>>>>>>
>>>>>>>>> Karl
>>>>>>>>>
>>>>>>>>> On Fri, Feb 12, 2010 at 1:15 PM, Jackson, Bruce
>>>>>>>>> <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>> Hi Pablo
>>>>>>>>>>
>>>>>>>>>> See the attached code. The biggest problem I've encountered is
>>>>>>>>>> that
>>>>>>>>>> the
>>>>>>>>>> Felix distribution is a huge pain to build under JDK 1.5, and
>>>>>>>>>> therefore
>>>>>>>>>> to
>>>>>>>>>> be able to use some of the bundles (for example the http service)
>>>>>>>>>> that
>>>>>>>>>> are
>>>>>>>>>> part of the distribution. Its not a simple job of just changing a
>>>>>>>>>> couple
>>>>>>>>>> of
>>>>>>>>>> entries in POM files: some components download pre-built JAR
>>>>>>>>>> files
>>>>>>>>>> from
>>>>>>>>>> the
>>>>>>>>>> web and explode these, thereby having classes built under 1.4
>>>>>>>>>> which
>>>>>>>>>> will
>>>>>>>>>> not
>>>>>>>>>> work when you dexify the bundles.
>>>>>>>>>>
>>>>>>>>>> This is something that would be great to see some work done on by
>>>>>>>>>> the
>>>>>>>>>> Felix
>>>>>>>>>> community, because while its true that the basic Felix core does
>>>>>>>>>> and
>>>>>>>>>> will
>>>>>>>>>> support Android, most of the add-on bundles wont.
>>>>>>>>>>
>>>>>>>>>> For my part, the ideal solution would be to see the whole
>>>>>>>>>> framework
>>>>>>>>>> be
>>>>>>>>>> based
>>>>>>>>>> on JDK 1.5 and not 1.4.
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>>
>>>>>>>>>> Bruce
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 12/02/2010 11:32, "pablomj" <[email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi Bruce, I am trying the same, but I don't have the solution
>>>>>>>>>>> yet.
>>>>>>>>>>> Do you have some advance?
>>>>>>>>>>> Salutations, thanks.
>>>>>>>>>>> Pablo.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Jackson, Bruce wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> The Felix site has a useful section on getting things going on
>>>>>>>>>>>> Android
>>>>>>>>>>>> (
>>>>>>>>>>>> http://felix.apache.org/site/apache-felix-and-google-android.html)
>>>>>>>>>>>> but
>>>>>>>>>>>> isn't
>>>>>>>>>>>> so clear about embedding the framework into an Android app"
>>>>>>>>>>>>
>>>>>>>>>>>> "Apache Felix can also be integrated with an Android
>>>>>>>>>>>> application.
>>>>>>>>>>>> To
>>>>>>>>>>>> achieve
>>>>>>>>>>>> this, you need to embed Felix into onCreate() method of your
>>>>>>>>>>>> Activity
>>>>>>>>>>>> class
>>>>>>>>>>>> (see Android docs for more details on how to use an Activity)
>>>>>>>>>>>> and
>>>>>>>>>>>> process
>>>>>>>>>>>> your bundles as shown above."
>>>>>>>>>>>>
>>>>>>>>>>>> Has anyone got an example of how you do this? I understand how
>>>>>>>>>>>> to
>>>>>>>>>>>> write
>>>>>>>>>>>> the
>>>>>>>>>>>> Android app, and I get the point being made here. What I need
>>>>>>>>>>>> to
>>>>>>>>>>>> understand
>>>>>>>>>>>> is:
>>>>>>>>>>>>
>>>>>>>>>>>> 1. How do you launch the Felix framework. What do I need to
>>>>>>>>>>>> instantiate?
>>>>>>>>>>>> 2. Where does the framework get its boot configuration (i.e.
>>>>>>>>>>>> what
>>>>>>>>>>>> bundles
>>>>>>>>>>>> to
>>>>>>>>>>>> load, run levels, environment variables, etc) from in this
>>>>>>>>>>>> case?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Karl Pauls
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://old.nabble.com/Felix-on-Android-tp27245141p27597525.html
>>>>>> Sent from the Apache Felix - Dev mailing list archive at Nabble.com.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Felix-on-Android-tp27245141p27612787.html
>>>> Sent from the Apache Felix - Dev mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>>
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/Felix-on-Android-tp27245141p27714130.html
Sent from the Apache Felix - Dev mailing list archive at Nabble.com.