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图像”);}
如果您需要服务中的上下文,只需将服务用作上下文。不起作用。需要超级调用请查看我的更新。他为什么不删除现有的构造函数?无论如何,你都不能手动实例化一个服务。你绝对是对的,我的错误提示。提示:服务是一个上下文