2013-04-03 5 views
1

Я попытался создать прямоугольник, используя нижеприведенную программу. Но его бросает исключение времени выполнения. Эмулятор открывается, но неожиданно закрывается. В моем проекте, у меня есть два класса -Map.java и StartDraw.javajava.lang.RuntimeException: Невозможно создать экземпляр активности ComponentInfo: java.lang.InstantiationException

Ниже приведен код для Map.java:

package com.mapping; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class Map extends View { 
Paint paint = new Paint(); 

public Map(Context context) { 
    super(context);    
} 

@Override 
public void onDraw(Canvas canvas) { 
    paint.setColor(Color.BLACK); 
    paint.setStrokeWidth(3); 
    canvas.drawRect(30, 30, 80, 80, paint); 
    paint.setStrokeWidth(0); 
    paint.setColor(Color.CYAN); 
    canvas.drawRect(33, 60, 77, 77, paint); 
    paint.setColor(Color.YELLOW); 
    canvas.drawRect(33, 33, 77, 60, paint); 

} 

Ниже приведен код для StartDraw.java

package com.mapping; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 

public class StartDraw extends Activity { 
Map drawView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    drawView = new Map(this); 
    drawView.setBackgroundColor(Color.WHITE); 
    setContentView(drawView); 

} 
} 

Ниже manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.mapping" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.mapping.Map" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

Пожалуйста, помогите мне разрешить это исключение. Я сомневаюсь, что это может быть из-за конструктора, но не может получить, что изменить и как изменить.

Ниже LogCat

04-03 11:23:56.611: D/dalvikvm(333): newInstance failed: no <init>() 
04-03 11:23:56.632: D/AndroidRuntime(333): Shutting down VM 
04-03 11:23:56.632: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
04-03 11:23:56.701: E/AndroidRuntime(333): FATAL EXCEPTION: main 
04-03 11:23:56.701: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mapping/com.mapping.Map}: java.lang.InstantiationException: com.mapping.Map 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.os.Looper.loop(Looper.java:123) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-03 11:23:56.701: E/AndroidRuntime(333): at java.lang.reflect.Method.invokeNative(Native Method) 
04-03 11:23:56.701: E/AndroidRuntime(333): at java.lang.reflect.Method.invoke(Method.java:507) 
04-03 11:23:56.701: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-03 11:23:56.701: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-03 11:23:56.701: E/AndroidRuntime(333): at dalvik.system.NativeStart.main(Native Method) 
04-03 11:23:56.701: E/AndroidRuntime(333): Caused by: java.lang.InstantiationException: com.mapping.Map 
04-03 11:23:56.701: E/AndroidRuntime(333): at java.lang.Class.newInstanceImpl(Native Method) 
04-03 11:23:56.701: E/AndroidRuntime(333): at java.lang.Class.newInstance(Class.java:1409) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
04-03 11:23:56.701: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
04-03 11:23:56.701: E/AndroidRuntime(333): ... 11 more 
04-03 11:24:04.161: I/Process(333): Sending signal. PID: 333 SIG: 9 

ответ

1

Вы даете пользовательское имя вида в <activity>, как карты вам нужно установить имя «StartDraw» для названия действия не Имя вида

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.mapping" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".StartDraw" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 
0

Регистрация StartDraw вместо Map в AndroidManifest.xml по умолчанию Activity, потому что вы расширяете класс деятельности в StartDraw. так что просто изменить имя активность по умолчанию StartDraw в манифесте:

<activity 
     android:name=".StartDraw" <!--here use StartDraw instead Map --> 
     android:label="@string/app_name" > 
<!-- other attributes here --> 
</activity> 
0

просто изменить в androidmanifest.xml вместо android:name="com.mapping.Map"

<activity android:name=".startdraw" android:label="@string/app_name" android:launchMode="singleTask"> 
Смежные вопросы