简体   繁体   English

java.lang.InstantiationException:无法实例化类; 没有空的构造函数

[英]java.lang.InstantiationException: can't instantiate class; no empty constructor

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. 但就我而言,它不接受字符串作为参数,因此我真的不知道要传递什么...我将向您展示我的代码,该代码取自Professional Android Development中的Reto Meier示例。

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. 如果您有MainActivity,则通常需要从Activity类扩展它。

  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. 问题可能在那里,您在清单文件中声明您有一个Activity作为MainActivity,但是您没有这样做,因为您是从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 在MainActivity中,您可以尝试

setContentView(new MyView(this));

And in the AndroidManifest you declare (I guess you had the same here or like it) 并在AndroidManifest中声明(我猜您在这里或喜欢的都一样)

    <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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Android在重新启动应用程序时崩溃:java.lang.InstantiationException:无法实例化类; 没有空的构造函数 - Android crash on restart app : java.lang.InstantiationException: can't instantiate class ; no empty constructor Android-java.lang.InstantiationException:无法实例化类:无空构造函数 - Android - java.lang.InstantiationException: can't instantiate class : no empty constructor Android通过其他类java.lang.InstantiationException中的线程调用函数:无法实例化类……没有空的构造函数 - Android invoke a Function via Thread in other Class java.lang.InstantiationException: can't instantiate class … no empty constructor java.lang.RuntimeException:无法实例化活动…java.lang.InstantiationException:类没有零参数构造函数 - java.lang.RuntimeException: Unable to instantiate activity… java.lang.InstantiationException: class has no zero argument constructor java.lang.InstantiationException尝试实例化子类时出错 - java.lang.InstantiationException Error when try instantiate a children class java.lang.InstantiationException:类没有零参数构造函数错误 - java.lang.InstantiationException: class has no zero argument constructor error 自定义视图 class 正在抛出:java.lang.InstantiationException: java.lang.Z9BD81329FEDFDEFE0AF2 没有78个零参数构造函数 - Custom View class is throwing: java.lang.InstantiationException: java.lang.Class has no zero argument constructor Xamarin Android java.lang.InstantiationException:java.lang.Class没有零参数构造函数 - Xamarin Android java.lang.InstantiationException: java.lang.Class has no zero argument constructor 一个Applet的java.lang.InstantiationException - java.lang.InstantiationException with an Applet 错误java.lang.InstantiationException - Error java.lang.InstantiationException
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM