[GELÖST] ActivityNotFoundException: Unable to find explicit activity class

  • 7 Antworten
  • Neuester Beitrag
Diskutiere [GELÖST] ActivityNotFoundException: Unable to find explicit activity class im Android App Entwicklung im Bereich Betriebssysteme & Apps.
W

Wambui

Neues Mitglied
Hallo zusammen,

folgende Activities habe ich aus dem Androidbuch (www.androidbuch.de mit Quellcode) und will das Aufrufen der zweiten Activity nachvollziehen. Ich verwende Android-Studio 1.2.2.
Beim Anklicken des Menüpunktes "Hilfe anzeigen", der die Activity HilfeAnzeigen starten soll, kommt folgende ActivityNotFoundException:
"Unable to find explicit activity class {com.projekt.amando4/com.projekt.amando4.gui.HilfeAnzeigen}; have you declared this activity in your AndroidManifest.xml?"

StartActivity:
Code:
package com.projekt.amando4.gui;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import com.projekt.amando4.R;
import com.projekt.amando.common.GpsData;
import com.projekt.amando.db.SpieldatenGenerator;
import com.projekt.amando.amando4.kontakt.GeoKontakt;
import com.projekt.amando.amando4.kontakt.GeoKontaktSpeicher;
import com.projekt.amando.receiver.SmsBroadcastReceiver;
import com.projekt.amando.services.GeoPositionsService;**/

public class Startseite extends Activity {

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

  setContentView(R.layout.startseite);
  setTitle(R.string.startseite_titel);

  registerForContextMenu(findViewById(R.id.sf_starte_geokontakte));
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.hauptmenu, menu);
  return super.onCreateOptionsMenu(menu);
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.opt_einstellungenBearbeiten:
  // TODO opt_einstellungenBearbeiten
  return true;
  case R.id.opt_hilfe:
  // TODO opt_hilfe
  return true;
  case R.id.opt_amandoBeenden:
  finish();
  return true;
  default:
  return super.onOptionsItemSelected(item);
  }
  }

  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
  ContextMenuInfo menuInfo) {
  if (v.getId() == R.id.sf_starte_geokontakte) {
  getMenuInflater().inflate(R.menu.startseite_contextmenu, menu);
  }
  super.onCreateContextMenu(menu, v, menuInfo);
  }

  @Override
  public boolean onContextItemSelected(MenuItem item) {
  if (item.getItemId() == R.id.opt_geokontakt_verwalten_hilfe) {
  final Intent intent = new Intent(this, HilfeAnzeigen.class);
  startActivity(intent);
  return true;
  }
  return super.onContextItemSelected(item);
  }

  public void onClickPositionSenden(final View sfNormal) {
  // TODO onClickPositionSenden
  }

  public void onClickGeokontakteVerwalten(final View sfNormal) {
  // TODO
  }

  public void onClickKarteAnzeigen(final View sfNormal) {
  // TODO
  }

  public void onClickSimulationStarten(final View sfNormal) {
  // TODO
  }
}
Zweite Activity
Code:
package com.projekt.amando4.gui;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

import com.projekt.amando4.R;

import java.io.IOException;
import java.io.InputStream;

public class HilfeAnzeigen extends Activity {
  /** Kuerzel fuers Logging. */
  // private static final String TAG = HilfeAnzeigen.class.getSimpleName();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // Log.v(TAG, "onCreate(): entered...");
  setContentView(R.layout.hilfe_anzeigen);

  final WebView view = (WebView) findViewById(R.id.webview);
  view.getSettings().setJavaScriptEnabled(true);
  initialisiereWebKit(view, this);
  view.bringToFront();
  }

  private void initialisiereWebKit(WebView view, Context context) {
  final String mimetype = "text/html";
  final String encoding = "UTF-8";
  String htmldata;

  int contextMenueId = R.raw.hilfe_komplett;
  InputStream is = context.getResources().openRawResource(contextMenueId);

  try {
  if (is != null && is.available() > 0) {
  final byte[] bytes = new byte[is.available()];
  is.read(bytes);
  htmldata = new String(bytes);
  view.loadDataWithBaseURL(null, htmldata, mimetype, encoding, null);
  }
  } catch (IOException e) { }
  }
}
Manifest.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.projekt.amando4" >
  android:versionCode="2"
  android:versionName="2.0"

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

  <uses-permission android:name=
  "android.permission.READ_CONTACTS"/>

  <application
  android:allowBackup="true"
  android:icon="@mipmap/ic_launcher"
  android:label="@string/app_name"
  android:debuggable="true"
  android:theme="@style/AmandoTheme" >

  <activity
  android:name="com.projekt.amando4.gui.Startseite"
  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>

  <activity android:name="com.projekt.amando4.gui.HilfeAnzeigen" />

</manifest>
Logcat:
Code:
06-23 11:38:29.699  933-933/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
  android.content.ActivityNotFoundException: Unable to find explicit activity class {com.projekt.amando4/com.projekt.amando4.gui.HilfeAnzeigen}; have you declared this activity in your AndroidManifest.xml?
  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
  at android.app.Activity.startActivityForResult(Activity.java:3390)
  at android.app.Activity.startActivityForResult(Activity.java:3351)
  at android.app.Activity.startActivity(Activity.java:3587)
  at android.app.Activity.startActivity(Activity.java:3555)
  at com.projekt.amando4.gui.Startseite.onContextItemSelected(Startseite.java:94)
  at android.app.Activity.onMenuItemSelected(Activity.java:2586)
  at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3644)
  at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:742)
  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:881)
  at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
  at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)
  at android.widget.AdapterView.performItemClick(AdapterView.java:298)
  at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
  at android.widget.AbsListView$1.run(AbsListView.java:3463)
  at android.os.Handler.handleCallback(Handler.java:730)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:5103)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:525)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
  at dalvik.system.NativeStart.main(Native Method)
06-23 11:38:29.819  290-439/? W/ActivityManager﹕ Force finishing activity com.projekt.amando4/.gui.Startseite
Im Prinzip ist das der gleiche Code wie in dem Lehrbuch bzw. den zur Verfügung gestellten Sourcecode. Warum bekomme ich dann diese Exception? Hat das mit Einstellungen in Android-Studio zu tun?

Grüße

Wambui
 
Jaiel

Jaiel

Dauergast
änder den Package namen der application in "com.projekt.amando4.gui"

und die activities nennst du so wie sie heißen nur mit einem "." vorne

er scheint wohl probleme damit zu ahben dass du das manifest im package deklarierst und dann noch einen expliziten namen angibst was mir irgendwie nciht einleuchtet...wenn ich drüber nachdenke sollte mein Vorschlga eig ncihts ändern....

also cih kontne dein fehler bei mir leider nciht reproduzieren!
 
W

Wambui

Neues Mitglied
Jaiel schrieb:
änder den Package namen der application in "com.projekt.amando4.gui"
Den Sinn verstehe ich nicht. Die App beginnt nit bei gui, sondern hat auf gleicher Ebene weitere Verzeichnisse.
Jaiel schrieb:
und die activities nennst du so wie sie heißen nur mit einem "." vorne
Das hatte ich bereits bedacht, ändert aber gar nichts an der ActivityNotFoundException. Wie gesagt, der Quellcode liegt auf besagter Website.
Jaiel schrieb:
er scheint wohl probleme damit zu ahben dass du das manifest im package deklarierst
Das verstehe ich ebenfalls nicht. Die Manifest wird von AndroidStudio bereits an der richtigen Stelle abgelegt. Und das Programm startet ja, lediglich dieser Intent macht Faxen.
Jaiel schrieb:
und dann noch einen expliziten namen angibst was mir irgendwie nciht einleuchtet...
Was für ein expliziter Name?

Wie gesagt Dein Vorschlag ändert leider nichts an der Fehlermeldung. Besten Dank.
 
N

niko132

Neues Mitglied
Unter Android muss jede Activity im Manifest gelistet sein!
Also einfach im "application" tag im Manifest, unter der anderen Activity
Code:
<activity
    android:name="com.projekt.amando4.gui.HilfeAnzeige">
</activity>
hinzufügen & schon sollte es funktionieren.
 
Jaiel

Jaiel

Dauergast
niko132 schrieb:
Unter Android muss jede Activity im Manifest gelistet sein!
Also einfach im "application" tag im Manifest, unter der anderen Activity
Code:
<activity
    android:name="com.projekt.amando4.gui.HilfeAnzeige">
</activity>
hinzufügen & schon sollte es funktionieren.
genau das amcht er ja bereits....musst nur etwas runterscrollen da ganz unten ist die deklaration




explizit bedeutet du geiubst den vollständigen Namen der Klasse an...in deinem Fall "com.blablabla.blablabla.Hilfeanzeigen"

".HilfeAnzeigen" wäre implizit und würde an das Package der Application gebunden werden

Jo stimmt hab grad bemerkt dass ich es sehr komsich angelegt habe bei einem Projekt:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.jaielsoft.activities"
    android:versionCode="1"
    android:versionName="1.0" >
   
   
    <uses-permission android:name="android.permission.VIBRATE" />
   
  
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/dotlogo"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
       
        >
        <activity
            android:name=".SplashScreenActivity"
               android:theme="@android:style/Theme.NoTitleBar"
               android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity
            android:name=".MainActivity"
               android:theme="@android:style/Theme.NoTitleBar"
               android:screenOrientation="portrait">
        </activity>
       
       
        <activity
            android:name=".PlayActivity"
               android:theme="@android:style/Theme.NoTitleBar"
               android:screenOrientation="portrait">
        </activity> 
       
        <receiver android:name=".DotBroadcastReceiver"/>
    </application>

</manifest>

Nichts destotrotz gibst du damit nur dein Package an in dem das Manifest deklariert wurde und welches du dann im google play store benutzt(deswegen sehr ungünstig von mir....aber eig egal)
 
N

niko132

Neues Mitglied
Jaiel schrieb:
genau das amcht er ja bereits....musst nur etwas runterscrollen da ganz unten ist die deklaration
Ohh, das hab ich wohl übersehen :biggrin:

Aber trotzdem muss die Activity im application tag stehen. Und das ist hier wohl nicht der Fall:
Wambui schrieb:
...
</application>
<activity
android:name="com.projekt.amando4.gui.HilfeAnzeigen" />
...
 
Jaiel

Jaiel

Dauergast
oh genau das hab ich nämlich nicht gesehen..... :)

Ich hab wirklich angestrengt gesucht aber wohl an der falschen stelle XD
 
W

Wambui

Neues Mitglied
Meine Güte, ist das peinlich. Du hast vollkommen recht. Wie konnte ich das nur nicht sehen?
niko132 schrieb:
Aber trotzdem muss die Activity im application tag stehen.
Vielen Dank für euere scharfen Blicke.

Wambui