Сбой newInstance: нет ошибки <init> при разработке программы для Android

1

Я пишу пример кода, чтобы использовать датчик ориентации Android для просмотра 3D-сцен.

Ошибка, которую я получил:

03-22 16:12:48.939: D/dalvikvm(9532): newInstance failed: no <init>()
03-22 16:12:48.939: D/AndroidRuntime(9532): Shutting down VM
03-22 16:12:48.939: W/dalvikvm(9532): threadid=1: thread exiting with uncaught exception (group=0x40018560)
03-22 16:12:48.949: E/AndroidRuntime(9532): FATAL EXCEPTION: main
03-22 16:12:48.949: E/AndroidRuntime(9532): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.droidnova.android.games.vortex/com.droidnova.android.games.vortex.Vortex}: java.lang.InstantiationException: com.droidnova.android.games.vortex.Vortex
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1680)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.os.Looper.loop(Looper.java:130)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread.main(ActivityThread.java:3835)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at java.lang.reflect.Method.invokeNative(Native Method)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at java.lang.reflect.Method.invoke(Method.java:507)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at dalvik.system.NativeStart.main(Native Method)
03-22 16:12:48.949: E/AndroidRuntime(9532): Caused by: java.lang.InstantiationException: com.droidnova.android.games.vortex.Vortex
03-22 16:12:48.949: E/AndroidRuntime(9532):     at java.lang.Class.newInstanceImpl(Native Method)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at java.lang.Class.newInstance(Class.java:1409)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-22 16:12:48.949: E/AndroidRuntime(9532):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672)
03-22 16:12:48.949: E/AndroidRuntime(9532):     ... 11 more

Vortex.java:

public class Vortex extends Activity {
    private static final String LOG_TAG = Vortex.class.getSimpleName();
    private VortexView _vortexView;
    SensorManager sm;
    private float headingAngle,pitchAngle,rollAngle;

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

        _vortexView = new VortexView(this);

        setContentView(_vortexView);        
        //setContentView(R.layout.main);
        SensorManager sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    }

    //////////////////

    private final Context context;
    public Vortex(Context context) {
        this.context = context;
    }


    int sensorType = Sensor.TYPE_ORIENTATION;

    private final SensorEventListener myOrientationListener = new SensorEventListener(){
        public void onSensorChanged(SensorEvent sensorEvent) {
            if(sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
                headingAngle = sensorEvent.values[0];
                pitchAngle = sensorEvent.values[1];
                rollAngle = sensorEvent.values[2];

                //TODO: 对应用程序应用方向变化
                _vortexView.updateAngles(headingAngle, pitchAngle, rollAngle);

            }
        }
        public void onAccuracyChanged(Sensor sensor, int Accuracy){}
    };

    //////////////////


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        Sensor orentation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        sm.registerListener(myOrientationListener, orentation, SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        sm.unregisterListener(myOrientationListener);
    }
    }

Я совершенно смущен, что может быть неправильным?

спасибо

bitxue

Я решил эту проблему, добавив

public Vortex() {
        super();
    }

метод в файле Vortex.java.

  • 0
    Когда система позволяет вам, поставьте свое решение в качестве ответа. Позже вы можете принять ответ.
Теги:

1 ответ

0

Чтобы уточнить ответ, добавленный первоначальным автором сообщения, Fragment требует, чтобы конструктор no-args по умолчанию присутствовал для любых фрагментов. Если база данных Android не может найти такой конструктор, она выкинет упомянутое выше средство InstantiationException.

Есть несколько причин, по которым Android не сможет найти конструктор по умолчанию. Первое очевидно: оно не существует (реализация Fragment добавила его собственный конструктор с аргументами, например). Если реализация Fragment соответствует рекомендациям Android и не определяет конструктор, вы можете избежать этой проблемы.

Вторая причина, по которой Android не сможет найти конструктор, связана с модификаторами доступа. Например, конструктор, определенный в частном внутреннем классе, будет недоступен для платформы Android, и результатом будет исключение InstantiationException.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню