【问题标题】:java.lang.RuntimeException: Unable to instantiate service ... has no zero argument constructor [duplicate]java.lang.RuntimeException:无法实例化服务......没有零参数构造函数[重复]
【发布时间】:2017-09-20 09:42:53
【问题描述】:

我有一个PictureHDFragment,我在其中使用Html.fromHtml(String source, 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();
    }
}

但这不起作用并启动RuntimeException,尤其是:

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) 

所以我知道问题是传递给构建器的参数,然后我尝试将其删除并通过方法 getApplicationContext 直接在 HttpImageGetter 类中获取上下文,但这会抛出 NullPointerException。

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 提示:服务上下文

标签: android runtimeexception


【解决方案1】:

尝试添加这个而不是现有的构造函数:public HttpImageGetter() {super("get HTML Image");} 如果您需要服务中的上下文,只需将服务用作上下文即可。

【讨论】:

  • 不起作用。需要超级调用
  • 请看我的更新。
  • 他为什么不移除现有的构造函数?无论如何您都不能手动实例化服务
  • 你绝对是对的,我给的不好的提示。
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2018-12-06
  • 2012-08-04
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多