2017-03-10 7 views
0

Ich versuche, eine Android-App zu schreiben, die protokolliert, wenn Sie auf eine Schaltfläche klicken, wird es Text in die Konsole eingeben, jedoch erhalte ich einen Fehler, wenn ich es kompiliere und es ausführe auf meinem Galaxy S7 Rand läuft 7.0 API Version 24.java.lang.RuntimeException: Kann nicht instanziieren activit

I've read that I need to add something into the manifest file aber ich bin mir nicht sicher, was ich hinzufügen muss.

Schwerwiegende Ausnahme: main Prozess: me.adamstephenson.test.test1, PID: 16405 java.lang.RuntimeException: Kann nicht Aktivität ComponentInfo {me.adamstephenson.test.test1/me.adamstephenson.test instanziieren .test1.MainActivity}: java.lang.ClassCastException: me.adamstephenson.test.test1.MainActivity nicht

package me.adamstephenson.test.test1; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity { 
    public class MyActivity extends Activity { 
     protected void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 

      setContentView(R.layout.activity_main); 

      final Button button = (Button) findViewById(R.id.RequestKey); 
      button.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        Log.d("RequestKey", "Clicked"); 
       } 
      }); 
     } 
    } 
} 

Source

zu android.app.Activity gegossen werden

Hier ist das Layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="me.adamstephenson.test.test1.MainActivity"> 

<Button 
    android:id="@+id/RequestKey" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" 
    tools:layout_editor_absoluteX="196dp" 
    tools:layout_editor_absoluteY="129dp" /> 
</android.support.constraint.ConstraintLayout> 

Schließlich ist hier die Manifest-Datei

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="me.adamstephenson.test.test1"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 
+1

Bitte zeigen Sie Ihre Manifest –

+0

@NikaKurdadze Sicher, nur die Post bearbeitet. – Adam

Antwort

1

Sie sind in Ihrem Manifest an die falsche Klasse verweisen. MyActivity ist die Aktivität, nicht MainActivity. Ändern Sie Ihr Manifest auf die folgenden:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="me.adamstephenson.test.test1"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity$MyActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

Und

Sie sollten Ihre innere Aktivität static sowie machen:

public class MainActivity { 
    public static class MyActivity extends Activity { 
     ... 
    } 
} 
+0

Ich habe gerade versucht, dies auszuführen, ich bekomme: 'java.lang.RuntimeException: Kann nicht instanziiert Aktivität ComponentInfo {me.adamstephenson.test.test1/me.adamstephenson.test.test1.MainActivity $ MyActivity}: java.lang.InstantiationException: java.lang.Class hat keinen Nullargumentkonstruktor' Was bedeutet "hat keinen Nullargumentkonstruktor" und wo soll ich hinschauen? – Adam

+1

Bitte überprüfen Sie die Bearbeitung –

+1

Ich musste "Cache/Neustart ungültig" drücken, damit dies funktioniert, aber es hat funktioniert. Ich habe die Frage als gelöst markiert. – Adam

1

Weil Ihre Aktivitätsklasse als innere Klasse erstellt und statischen Klasse. Ich habe keine Ahnung, warum Sie auf diese Weise gewählt haben, während Sie es auf diese richtige Art und Weise verwenden können:

public class MyActivity extends Activity { 

    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     setContentView(R.layout.activity_main); 

     final Button button = (Button) findViewById(R.id.RequestKey); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.d("RequestKey", "Clicked"); 
      } 
     }); 
    } 
    . 
    . 
    . 
    // other methods or inner class can exist here 
    } 
Verwandte Themen