title: Thread exiting with uncaught error : cannot instantiate class: no empty constructor
body: <p>Main Class:</p>
  
  <pre><code>public class CompassView extends View {
  
      private float bearing;
      private Paint markerPaint;
      private Paint textPaint;
      private Paint circlePaint;
      private String northString;
      private String southString;
      private String eastString;
      private String westString;
      private int textHeight;
  
      public void setBearing(float _bearing) {
          bearing = _bearing;
      }
      public float getBearing() {
          return bearing;
      }
  
      public CompassView(Context context) {
          super(context);
          initCompassView();
      }
      public CompassView(Context context, AttributeSet attrs) {
          super(context, attrs);
          initCompassView();
      }
      public CompassView(Context context, AttributeSet ats, int defaultstyle) {
          super(context, ats, defaultstyle);
          initCompassView();
      }
  
      protected void initCompassView() {
          setFocusable(true);
          circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
          Resources r = this.getResources();
          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);
          westString = r.getString(R.string.cardinal_west);
          eastString = r.getString(R.string.cardinal_east);
          southString = r.getString(R.string.cardinal_south);
  
          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 onDraw(Canvas canvas) {
          int px = getMeasuredWidth() / 2;
          int py = getMeasuredHeight() / 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 &lt; 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 = py - radius + textHeight;
                  canvas.drawText(angle, angleTextX, angleTextY, textPaint);
              }
              canvas.restore();
              canvas.rotate(15, px, py);
          }
  
          canvas.restore();
      }
  
      @
      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.getMode(measureSpec);
  
          if (specMode == MeasureSpec.UNSPECIFIED) {
              result = 200;
          } else {
              result = specSize;
          }
          return result;
      }
  }
  </code></pre>
  
  <p>Activity Class:</p>
  
  <pre><code>&lt;LinearLayout 
  
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" &gt;
  &lt;com.example.compass.CompassView 
  android:id="@+id/compassView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>Manifest.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.compass"
  android:versionCode="1"
  android:versionName="1.0" &gt;
  &lt;uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="17" /&gt;
  &lt;application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" &gt;
      &lt;activity
          android:name="com.example.compass.CompassView"
          android:label="@string/app_name" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>