java.lang.InstantiationException:无法实例类;没有空的构造 [英] java.lang.InstantiationException: can't instantiate class; no empty constructor

查看:144
本文介绍了java.lang.InstantiationException:无法实例类;没有空的构造的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这是错误pretty常见,我也知道我应该只是添加空构造像

 公共MainActivity(){
超级(MainActivity);

但在我的情况下,它不会接受一个字符串作为参数,所以我真的不知道该怎么过......我会告诉你我的code这是从雷托•梅耶尔例如在拍摄专业的Andr​​oid开发。

 包com.virtualflyer.compass;进口...公共类MainActivity扩展视图{    公共MainActivity(上下文的背景下){
        超级(上下文);
        initCompassView();
    }    公共MainActivity(上下文的背景下,ATTRS的AttributeSet){
        超(背景下,ATTRS);
        initCompassView();
    }    公共MainActivity(上下文的背景下,ATTRS的AttributeSet,诠释defaultstyle){
        超(背景下,ATTRS,defaultstyle);
        initCompassView();
    }    私人涂料markerPaint;
    私人涂料textPaint;
    私人涂料circlePaint;
    私人字符串northString;
    私人字符串southString;
    私人字符串westString;
    私人字符串eastString;
    私人诠释textHeight不同;    保护无效initCompassView(){
        setFocusable(真);        资源R = this.getResources();        circlePaint =新的油漆(Paint.ANTI_ALIAS_FLAG);
        circlePaint.setColor(r.getColor(R.color.background_color));
        circlePaint.setStrokeWidth(1);
        circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);        northString = r.getString(R.string.cardinal_north);
        southString = r.getString(R.string.cardinal_south);
        eastString = r.getString(R.string.cardinal_east);
        westString = r.getString(R.string.cardinal_west);        textPaint =新的油漆(Paint.ANTI_ALIAS_FLAG);
        textPaint.setColor(r.getColor(R.color.text_color));        textHeight不同=(INT)textPaint.measureText(YY);
        markerPaint =新的油漆(Paint.ANTI_ALIAS_FLAG);
        markerPaint.setColor(r.getColor(R.color.marker_color));    }    @覆盖
    保护无效onMeasure(INT widthMeasureSpec,诠释heightMeasureSpec){
        INT是measuredWidth =措施(widthMeasureSpec);
        INT是measuredHeight =措施(heightMeasureSpec);
        INT D = Math.min(是measuredWidth,measuredHeight可以);
        setMeasuredDimension(D,D);
    }    私人诠释措施(INT measureSpec){
        INT结果为0;
        INT specMode = MeasureSpec.getMode(measureSpec);
        INT specSize = MeasureSpec.getSize(measureSpec);
        如果(specMode == MeasureSpec.UNSPECIFIED){
            结果= 200;
        }其他{
            结果= specSize;
        }
        返回结果;
    }    私人浮动轴承;    公共无效setBearing(浮点_bearing){
        轴承= _bearing;
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
    }    公众持股量getBearing(){
        返回轴承;
    }    @覆盖
    公共布尔dispatchPopulateAccessibilityEvent(最终AccessibilityEvent事件){
        super.dispatchPopulateAccessibilityEvent(事件);
        如果(isShown()){
            字符串bearingStr =将String.valueOf(轴承);
            如果(bearingStr.length()> AccessibilityEvent.MAX_TEXT_LENGTH)
                bearingStr = bearingStr.substring(0,AccessibilityEvent.MAX_TEXT_LENGTH);
            event.getText()加(bearingStr)。
            返回true;
        }
        其他{
            返回false;
        }        }
    @覆盖
    保护无效的onDraw(帆布油画){
        INT mMeasuredHeight = getMeasuredHeight();
        INT mMeasuredWidth = getMeasuredWidth();
        INT PX = mMeasuredWidth / 2;
        INT PY = mMeasuredHeight / 2;        INT半径= Math.min(PX,PY);        canvas.drawCircle(PX,PY,半径circlePaint);
        canvas.save();
        canvas.rotate(-bearing,PX,PY);        INT输出textWidth =(int)的textPaint.measureText(W);
        INT cardinalX = PX-输出textWidth / 2;
        INT cardinalY = PY-半径+ textHeight不同;        的for(int i = 0; I< 24;我++){
            canvas.drawLine(PX,PY-半径,PX,PY-半径+ 10,markerPaint);
            canvas.save();
            canvas.translate(0,textHeight不同);            如果(I%6 == 0){
                串dirString =;
                开关(ⅰ){
                    情况下(0):{
                        dirString = northString;
                        INT矢状= 2 * textHeight不同;
                        canvas.drawLine(PX,矢状,PX-5,3 * textHeight不同,markerPaint);
                        打破;
                    }
                    案例(6):dirString = eastString;打破;
                    案例(12):dirString = southString;打破;
                    案例(18):dirString = westString;打破;
                }
                canvas.drawText(dirString,cardinalX,cardinalY,textPaint);
            }
            否则如果(ⅰ%3 == 0){
                串角=将String.valueOf(我* 15);
                浮angleTextWidth = textPaint.measureText(角度);                INT angleTextX =(int)的(PX-angleTextWidth / 2);
                INT angleTextY =(INT)PY-半径+ textHeight不同;
                canvas.drawText(角度,angleTextX,angleTextY,textPaint);
            }
            canvas.restore();
            canvas.rotate(15,PX,PY);
        }
        canvas.restore();
    }}


解决方案

我不知道你在做什么,但是这可能是问题:


  1. 为什么你命名你的类从视图延伸活动?如果你有一个MainActivity,你通常要扩展,从活动类。


  2. 这个问题可能在那里,你在你有一个活动作为MainActivity您的清单文件中声明,但你不是因为你从View延长了。


下面就是你要做的:

 公共类MainActivity扩展活动{...}
公共类MyView的扩展视图{/ *从上面*插入您查看code /}

和在MainActivity你可以尝试

 的setContentView(新MyView的(本));

而在AndroidManifest声明(我猜你有同样的在这里还是喜欢它)

 <活动
        机器人:名字=。MainActivity
        机器人:标签=MainActivity>
        &所述;意图滤光器>
            <作用机器人:名字=android.intent.action.MAIN/>
            <类机器人:名字=android.intent.category.LAUNCHER/>
        &所述; /意图滤光器>
    < /活性GT;

I know this error is pretty common and I also know that I should just add the empty constructor like

public MainActivity(){
super("MainActivity");

but in my case it won't accept a string as an argument, so I don't really know what to pass... I'll show you my code which is taken from a Reto Meier example in Professional Android Development.

package com.virtualflyer.compass;

import...

public class MainActivity extends View {

    public MainActivity(Context context){
        super(context);
        initCompassView();
    }

    public MainActivity(Context context, AttributeSet attrs){
        super (context, attrs);
        initCompassView();
    }

    public MainActivity(Context context,AttributeSet attrs,int defaultstyle){
        super (context, attrs,defaultstyle);
        initCompassView();
    }

    private Paint markerPaint;
    private Paint textPaint;
    private Paint circlePaint;
    private String northString;
    private String southString;
    private String westString;
    private String eastString;
    private int textHeight;

    protected void initCompassView(){
        setFocusable(true);

        Resources r=this.getResources();

        circlePaint=new Paint (Paint.ANTI_ALIAS_FLAG);
        circlePaint.setColor(r.getColor(R.color.background_color));
        circlePaint.setStrokeWidth(1);
        circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);

        northString=r.getString(R.string.cardinal_north);
        southString=r.getString(R.string.cardinal_south);
        eastString=r.getString(R.string.cardinal_east);
        westString=r.getString(R.string.cardinal_west);

        textPaint= new Paint (Paint.ANTI_ALIAS_FLAG);
        textPaint.setColor(r.getColor(R.color.text_color));

        textHeight=(int)textPaint.measureText("yY");
        markerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        markerPaint.setColor(r.getColor(R.color.marker_color));



    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
        int measuredWidth=measure(widthMeasureSpec);
        int measuredHeight=measure(heightMeasureSpec);
        int d =Math.min(measuredWidth,measuredHeight);
        setMeasuredDimension(d,d);
    }

    private int measure(int measureSpec){
        int result=0;
        int specMode=MeasureSpec.getMode(measureSpec);
        int specSize=MeasureSpec.getSize(measureSpec);
        if (specMode==MeasureSpec.UNSPECIFIED){
            result=200;
        } else {
            result=specSize;
        }
        return result;
    }

    private float bearing;

    public void setBearing (float _bearing){
        bearing=_bearing;
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);
    }

    public float getBearing(){
        return bearing;
    }

    @Override
    public boolean dispatchPopulateAccessibilityEvent(final AccessibilityEvent event){
        super.dispatchPopulateAccessibilityEvent(event);
        if (isShown()){
            String bearingStr= String.valueOf(bearing);
            if (bearingStr.length()>AccessibilityEvent.MAX_TEXT_LENGTH)
                bearingStr=bearingStr.substring(0,AccessibilityEvent.MAX_TEXT_LENGTH);
            event.getText().add(bearingStr);
            return true;
        }
        else{
            return false;
        }

        }


    @Override
    protected void onDraw(Canvas canvas){
        int mMeasuredHeight=getMeasuredHeight();
        int mMeasuredWidth=getMeasuredWidth();
        int px= mMeasuredWidth/2;
        int py=mMeasuredHeight/2;

        int radius=Math.min(px,py);

        canvas.drawCircle(px,py,radius,circlePaint);
        canvas.save();
        canvas.rotate(-bearing,px,py);

        int textWidth=(int)textPaint.measureText("W");
        int cardinalX=px-textWidth/2;
        int cardinalY=py-radius+textHeight;

        for (int i=0; i<24; i++){
            canvas.drawLine(px,py-radius,px,py-radius+10,markerPaint);
            canvas.save();
            canvas.translate(0,textHeight);

            if (i%6==0){
                String dirString ="";
                switch (i){
                    case(0) :{
                        dirString=northString;
                        int arrowY=2*textHeight;
                        canvas.drawLine(px,arrowY,px-5,3*textHeight,markerPaint);
                        break;
                    }
                    case(6) :dirString=eastString;break;
                    case(12) :dirString=southString;break;
                    case(18) :dirString=westString;break;
                }
                canvas.drawText(dirString, cardinalX,cardinalY,textPaint);
            }
            else if (i%3==0){
                String angle =String.valueOf(i*15);
                float angleTextWidth=textPaint.measureText(angle);

                int angleTextX=(int) (px-angleTextWidth/2);
                int angleTextY=(int) py-radius+textHeight;
                canvas.drawText(angle,angleTextX,angleTextY,textPaint);
            }
            canvas.restore();
            canvas.rotate(15,px,py);
        }
        canvas.restore();
    }



}

解决方案

I don't know what you are doing, but this might be the problem:

  1. Why are you naming your class extended from View an Activity? If you have a MainActivity, you generally want to extend that from Activity class.

  2. The problem might be there, that you declare in your manifest file that you have an Activity as MainActivity, but you don't because you extended that from View.

Here's what you do:

public class MainActivity extends Activity{ ... }
public class MyView extends View { /*insert your View code from above*/ }

and in MainActivity you might try

setContentView(new MyView(this));

And in the AndroidManifest you declare (I guess you had the same here or like it)

    <activity
        android:name=".MainActivity"
        android:label="MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

这篇关于java.lang.InstantiationException:无法实例类;没有空的构造的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆