Android java.lang.RuntimeException:无法实例化服务。。。没有零参数构造函数

Android java.lang.RuntimeException:无法实例化服务。。。没有零参数构造函数,android,runtimeexception,Android,Runtimeexception,我有一个picturedfragment,其中我使用了Html.fromHtml(字符串源代码,Html.ImageGetter-ImageGetter,Html.TagHandler-TagHandler);我希望方法getDrawable(当遇到标记img时,它会被Html.fromHtml自动调用)启动一个线程,以便从片段中下载图像并避免阻塞所有应用程序 然后我创建了一个外部类HttpImageGetter,它实现了ImageGetter并扩展了IntentService public c

我有一个
picturedfragment
,其中我使用了
Html.fromHtml(字符串源代码,Html.ImageGetter-ImageGetter,Html.TagHandler-TagHandler)
;我希望方法
getDrawable
(当遇到标记
img
时,它会被
Html.fromHtml
自动调用)启动一个线程,以便从片段中下载图像并避免阻塞所有应用程序

然后我创建了一个外部类
HttpImageGetter
,它实现了
ImageGetter
并扩展了
IntentService

public class HttpImageGetter extends IntentService implements Html.ImageGetter {

private Bitmap bitmap = null;
private Context context;

public HttpImageGetter(Context context) {
    super("get HTML Image");
    this.context = context;
}

@Override
public Drawable getDrawable(String source) {
    //mvc.controller.getDrawable(getContext(), source);

    //Context context = getApplicationContext();
    startService(context, source);
    BitmapDrawable bitmapDrawable;

    if (bitmap == null)
        bitmapDrawable = null;
    else {
        //bitmapDrawable = bitmapDrawableIterator.next();
        bitmapDrawable = new BitmapDrawable(bitmap);
        bitmapDrawable.setBounds(0, 0, bitmapDrawable.getIntrinsicWidth(), bitmapDrawable.getIntrinsicHeight());
    }
    //BitmapDrawable bitmapDrawableExample = new BitmapDrawable(mvc.model.getHDImage());
    //bitmapDrawableExample.setBounds(0, 0, bitmapDrawableExample.getIntrinsicWidth(), bitmapDrawableExample.getIntrinsicHeight());

    return bitmapDrawable/*bitmapDrawableExample*/;
}

private final static String ACTION = "getImage";

private void startService(Context context, String source){
    Intent intent = new Intent(context/*getApplicationContext()*/, HttpImageGetter.class);
    intent.setAction(ACTION);
    intent.putExtra("source", source);
    context.startService(intent);
}

@Override
protected void onHandleIntent(@Nullable Intent intent) {
    String source = intent.getStringExtra("source");
    //Bitmap dr = null;

    try {
        URL url = new URL(source);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.connect();
        InputStream is = conn.getInputStream();
        bitmap = BitmapFactory.decodeStream(is);
        //dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
但这不起作用,会启动运行时异常,尤其是:

java.lang.RuntimeException: Unable to instantiate service com.android.mattia.flickclient.Controller.HttpImageGetter: java.lang.InstantiationException: java.lang.Class<com.android.mattia.flickclient.Controller.HttpImageGetter> has no zero argument constructor
                                                                                    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3446)
                                                                                    at android.app.ActivityThread.-wrap6(ActivityThread.java)
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1725)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:154)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6692)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
                                                                                 Caused by: java.lang.InstantiationException: java.lang.Class<com.android.mattia.flickclient.Controller.HttpImageGetter> has no zero argument constructor
                                                                                    at java.lang.Class.newInstance(Native Method)
                                                                                    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3443)
                                                                                    at android.app.ActivityThread.-wrap6(ActivityThread.java) 
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1725) 
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                    at android.os.Looper.loop(Looper.java:154) 
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6692) 
                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 
java.lang.RuntimeException:无法实例化服务com.android.mattia.flickclient.Controller.HttpImageGetter:java.lang.InstantiationException:java.lang.Class没有零参数构造函数
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:3446)
位于android.app.ActivityThread.-wrap6(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1725)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6692)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
原因:java.lang.InstanceException:java.lang.Class没有零参数构造函数
位于java.lang.Class.newInstance(本机方法)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:3443)
位于android.app.ActivityThread.-wrap6(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1725)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6692)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
因此,我知道问题在于传递给构建器的参数,然后我尝试删除它,并通过方法
getApplicationContext
直接在
HttpImageGetter
类中获取上下文,但这会引发NullPointerException

我如何解决这个问题


谢谢

尝试添加此现有构造函数:
publicHttpImageGetter(){super(“获取HTML图像”);}

如果您需要服务中的上下文,只需将服务用作上下文。

不起作用。需要超级调用请查看我的更新。他为什么不删除现有的构造函数?无论如何,你都不能手动实例化一个服务。你绝对是对的,我的错误提示。提示:服务是一个上下文