2013-11-26 5 views
1

Я не знаю, эта ошибка довольно часто, и я также знаю, что я должен просто добавить пустой конструктор какjava.lang.InstantiationException: невозможно создать экземпляр класса; не пустой конструктор

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

, но в моем случае это не будет принимать строку в качестве аргумента, так что дон «Я действительно знаю, что передать ... Я покажу вам свой код, который взят из примера Reto Meier в 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(); 
    } 



} 
+2

'super()'. Супервызов должен отражать подпись переопределенного метода, с которого вы звоните. – Simon

+0

Пустой конструктор. Создайте конструктор как 'public MainActivity() {}' – Wamasa

+0

@Simon Я пробовал, но он говорит мне: «Невозможно разрешить метод» super() « – VirtualFlyer

ответ

2

Я не знаю, что вы делаете, но это может быть проблема:

  1. Почему вы именование класс простиралась от просмотра активности? Если у вас есть MainActivity, вы обычно хотите расширить это из класса Activity.

  2. Возможно, проблема в том, что вы заявляете в своем файле манифеста, что у вас есть Activity as MainActivity, но вы этого не сделали, потому что вы расширили это из представления.

Вот что вы делаете:

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

и MainActivity вы можете попробовать

setContentView(new MyView(this)); 

И в 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> 
+0

Ты был фантастическим, спасибо, спасибо, спасибо вы неправильно поняли многие вещи, остановитесь и перейдете все снова. СПАСИБО! – VirtualFlyer

+0

Если ответ решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его. Проверьте эту ссылку: http: //meta.stackover flow.com/help/someone-answers – Sipka

Смежные вопросы