Ошибка при попытке инициализировать службу (которая расширяет класс IntentService)

Я пытаюсь играть с сервисом в Android, мое приложение содержит действие с кнопкой, чтобы оно могло выполнять действие, когда я нажимаю ее. Основным компонентом является ExtractingURLService, который расширяет класс инфраструктуры IntentService. Я переопределил метод onHandleIntent(), чтобы он мог правильно обрабатывать переданное ему намерение. Код:

public  class ExtractingURLService extends IntentService {

    private static final String TAG = "ExtractingURLService"; 

    public ExtractingURLService(String name) {
        super("ExtractingURLService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // do something here !
        }
    }



}

Файл манифеста Android:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="example.service.urlextraction"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ServiceExample02Activity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".ExtractingURLService" android:enabled="true"></service>

    </application>
</manifest>

В моем единственном классе Activity я вызываю службу, используя:

Intent startServiceIntent =  new Intent(this, ExtractingURLService.class);
startService(startServiceIntent);

Это вся моя работа, но при развертывании я получил ошибку времени выполнения:

04-09 16:24:05.751: ОШИБКА/AndroidRuntime(1078): Причина: java.lang.InstantiationException: example.service.urlextraction.ExtractingURLService

Что мне с этим делать??


person toantran    schedule 09.04.2012    source источник
comment
Хм, код выглядит нормально. Пробовали ли вы обновить и очистить проект?   -  person Laith Alnagem    schedule 10.04.2012
comment
Да, я делал это много раз, очищать и строить, затем очищать, а затем строить :)   -  person toantran    schedule 10.04.2012


Ответы (2)


Добавить полный путь службы

<service android:name="com.foo.services.ExtractingURLService" android:enabled="true"></service>

Служба намерений должна выглядеть так:

package com.foo.services;

import android.app.IntentService;
import android.content.Intent;

public class ExtractingURLService extends IntentService {

    private static final String TAG = "ExtractingURLService";

    public ExtractingURLService() {
        super("ExtractingURLService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // do something here !
    }
}
person Laith Alnagem    schedule 10.04.2012
comment
На самом деле, я просто даю ему имя класса, а не полное имя, ну, просто попробуйте добавить полное имя пакета, НЕ работает - person toantran; 10.04.2012
comment
Итак, ваш файловый пакет: example.service.urlextraction.ExtractingURLService правильный? - person Laith Alnagem; 10.04.2012
comment
Я изменил свой конструктор, как вы инструктируете, но это то же самое :( - person toantran; 10.04.2012
comment
Я вставил ваш код с моими изменениями, и он работал нормально. выложу все изменения - person Laith Alnagem; 10.04.2012
comment
большое спасибо, теперь работает. Действительно странно :) в любом случае это Android :) - person toantran; 10.04.2012

Вы можете добавить блок try and catch, чтобы избежать сбоя. У меня это работает.

try {
      Intent intent = new Intent(DashboardActivity.this, MyService.class);
      startService(intent);

     }catch (IllegalStateException e){

    }catch (Exception ee){

   }

person Riaz Ali Khan    schedule 19.09.2020
comment
Вы никогда не должны скрывать такие исключения. Зарегистрируйте его, обработайте, бросьте снова или используйте любую комбинацию из этих 3, но никогда не оставляйте catch пустым, так как это сделает выявление и отладку любых проблем практически невозможными. - person Dragonthoughts; 19.09.2020