当我尝试从另一个活动中调用活动时,我收到此异常。完整的例外是
android.content.ActivityNotFoundException:无法找到显式活动类{com.x.y / com.x.y.class};
我正在进行intent.setClass("com.x.y","com.x.y.className")
,其中className
是我的活动类的名称,com.x.y
是它所在的包。
我的AndroidManifest.xml包含以下内容:
<activity android:name="com.x.y.className" android:label="@string/app_name">
我错过了什么吗?
答案 0 :(得分:31)
您可能需要检查是否已将新活动添加到manifest.xml文件
示例:
<activity
android:name=".className"
android:label="@string/app_name" >
</activity>
答案 1 :(得分:16)
如果其他人遇到类似的事情并且到达这个帖子,我遇到的问题可能会为您节省一些时间。可能与OP的问题无关,但def与ActivityNotFound异常有关。
我试图使用以下方法加载活动:
Intent intent = new Intent( this, class );
然而,即使我多次检查并重新检查代码,我也不断获得ActivityNotFoundException
。
我得到的这个异常实际上并不是由意图造成的,而是我在加载的活动中运行的一些代码抛出RuntimeException
。 (我的问题是由Typeface.createFromAsset()
)
您可能在活动中遇到类似的RuntimeException。
要查看是否是这种情况,请将您的意图代码放在try catch块中。像这样:
try {
/* your code */
...
} catch ( ActivityNotFoundException e) {
e.printStackTrace();
}
再次运行你的应用程序,并检查你的LogCat,如果它是同一个问题,你会得到一个RuntimeException,其中有一个“引发者:”条目指向你的实际问题。
我花了一个小时试图解决这个问题。希望这可以节省一些时间。
答案 2 :(得分:14)
您正在调用的活动不仅应出现在Manifest中,而且还应出现在CALLING包的Manifest中。
答案 3 :(得分:8)
从清单中删除您的活动,然后重新添加。此类型不直接写入XML类型。而是转到Application > Application nodes > add
,选择“活动”,然后浏览文件源。
这对我有用。
答案 4 :(得分:3)
intent.setClass将参数作为“包上下文”和“类”。 一个例子是:
intent.setClass(CurrentActivity.this, TargetActivity.class);
您还需要检查活动是否已在清单文件中注册。
答案 5 :(得分:2)
添加了一个新活动并在manifest.xml中定义了它,但我仍然收到“无法找到显式活动类”错误。我正在使用Eclipse。我的问题的解决方案是“清理”项目。从Eclipse的主菜单:Project | Clean ....然后选择你的项目并清理它。
答案 6 :(得分:1)
嘿,你需要使用另一种形式的Intent构造函数。这肯定会在一秒钟内解决您的问题:
示例:
Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");
startActivity(inte);
这很有效,我检查了这段代码,它的工作正常。
答案 7 :(得分:1)
当我在另一个类(作为内部类)中实现Activity时,我有一个ActivityNotFoundException:
//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
//...
在清单中声明如下:
<activity android:name=".Pref.Activity"
...
在将此声明为正常班级(公共班级PrefActicity)并相应地更改清单后,它照常工作。
答案 8 :(得分:1)
我使用getActivityContext()
(而不是Activity.this
)来保存菜单代码以保存一些工作,并将其复制并粘贴到每个活动而不进行每次编辑。
我用Activity.this
替换了它们,问题就消失了。
我有一种感觉,聪明的Android家伙可以解决这个问题。想听听它会是什么。
答案 9 :(得分:0)
如果在应用程序中包含库并且库正在调用库项目中定义的活动,则也会发生此异常。在这种情况下,我们需要将库的清单与调用应用程序的清单合并。
使用ADT版本20,我们可以通过在调用app的project.properties中添加以下语句来实现此目的。
manifestmerger.enabled = true
答案 10 :(得分:0)
我对此错误的解决方法是在清单中的名称前添加包名称。
我有以下活动:
id.scanner.main.A1
id.scanner.main.gallery.A2
我的清单包含以下内容:
<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>
这解决了这个问题:
<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>
答案 11 :(得分:0)
查看项目bin文件夹中Android Manifest File的内容。编译和打包应用程序时,Manifest文件将复制到bin文件夹。在我的情况下,bin文件夹中的Manifest不同意原始Manifest。这可能是Eclipse的一个错误。我手动将Manifest复制到bin文件夹,然后就可以了。
答案 12 :(得分:0)
您可以在manifiest.xml
文件
action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"
答案 13 :(得分:0)
我也有同样的情况。在阅读了佩尔森的回答之后,我修改了我的活动并发现我写了
public void onCreate(Bundle s)
但事实上它应该是
protected void onCreate(Bundle s)
它现在有效!
答案 14 :(得分:0)
如果你有一个Activity对象(你需要启动),这是有效的:
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
答案 15 :(得分:0)
您正在调用的活动不包含“sheme”并包含intent-filter:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.sj.myapplication.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
所以在调用代码时:
Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
答案 16 :(得分:0)
我还通过将错误的视图传递给setContentView()来遇到ActivityNotFoundException,每个活动的类文件都必须以这种方式与布局xml文件相对应。
axios({
url: '/users/avatar',
method: 'GET',
headers: {
'Authorization': "Bearer " + token,
},
timeout: 1000,
data: {avatar: avatarUrl},
responseType: 'blob',
})
~``
相对于
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wrongView);
}
答案 17 :(得分:0)
当我遇到同样的问题时。如果您正在使用库类文件并将其写入android清单文件,请将其写入,然后删除库项目清单文件此部分&gt;&gt; 然后它绝对会起作用..
答案 18 :(得分:0)
是的,我也遇到了这个问题。我刷新了这个项目。然后,一切正常。
答案 19 :(得分:0)
除了Mina的回答。 当您将活动声明为内部静态类时,您应该将您的活动写入清单,如...
<activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />
这里.app来自你的包名,它可以是.helpers.afdfa $ afda
答案 20 :(得分:0)
尝试使用以下内容:
intent.setClassName("com.x.y", "com.x.y.className");
这对我有用
答案 21 :(得分:0)
重新启动Eclipse并再次检查Manifestfile。如果您发现缺少相应的活动,请将其添加并重试。它解决了我的类似问题。
答案 22 :(得分:0)
查看文档 here 您想要的是:
intent.setClassName("com.x.y", "className");
答案 23 :(得分:-1)
我有同样的问题。我尝试了一切,但是后来我解决的错误是双引号和我的类名之间留有空格。它一定要是:
intent.setClassName("com.x.y","com.x.y.className")
不
intent.setClassName("com.x.y"," com.x.y.className")