Android Studio:无法启动活动组件信息
Posted
技术标签:
【中文标题】Android Studio:无法启动活动组件信息【英文标题】:Android Studio: Unable to start activity ComponentInfo 【发布时间】:2017-07-13 16:02:35 【问题描述】:如果我尝试启动我的应用程序,则会出现以下错误:
07-13 17:51:04.663 23276-23276/com.aaron.waller.angelasoundboard E/androidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfocom.aaron.waller.angelasoundboard/com.aaron.waller.angelasoundboard.MainActivity: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.access$700(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
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:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:355)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:324)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:285)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at com.aaron.waller.angelasoundboard.MainActivity.onCreate(MainActivity.java:40)
at android.app.Activity.performCreate(Activity.java:5372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.access$700(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
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:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
问题应该出在这段代码中:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
我的activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@color/colorAccent"
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="Angela Merkel Soundboard" />
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:id="@+id/drawerLayout">
<FrameLayout
android:orientation="vertical"
android:layout_
android:layout_
android:id="@+id/containerView">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
android:layout_gravity="bottom|end"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
</FrameLayout>
<android.support.design.widget.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:layout_gravity="start"
android:id="@+id/shitstuff"
app:itemTextColor="@color/black"
app:menu="@menu/drawermenu"
/>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
我的 Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aaron.waller.angelasoundboard">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.aaron.waller.angelasoundboard.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
</application>
</manifest>
还有我的styles.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
为什么会出现此错误,我该如何解决?
我已经尝试更改此行:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
到这一行:
但这不起作用
这是整个我的 MainActivity.java:
public class MainActivity extends AppCompatActivity
public MediaPlayer mp;
DrawerLayout mDrawerLayout;
NavigationView mNavigationView;
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;
public InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mInterstitialAd = new InterstitialAd(MainActivity.this);
mInterstitialAd.setAdUnitId("ca-app-pub-2859881364147521/9737493693");
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener()
// Listen for when user closes ad
public void onAdClosed()
// When user closes ad end this activity (go back to first activity)
super.onAdClosed();
);
final File FILES_PATH = new File(Environment.getExternalStorageDirectory(), "Android/data/com.aaron.waller.angelasoundboard/files");
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
if (!FILES_PATH.mkdirs())
Log.w("error", "Could not create " + FILES_PATH);
else
Toast.makeText(MainActivity.this, "error", Toast.LENGTH_LONG).show();
finish();
ActivityCompat.requestPermissions(MainActivity.this,
new String[]android.Manifest.permission.READ_EXTERNAL_STORAGE,
1);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mNavigationView = (NavigationView) findViewById(R.id.shitstuff);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();
mNavigationView.setItemIconTintList(null);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(MenuItem menuItem)
mDrawerLayout.closeDrawers();
if (menuItem.getItemId() == R.id.nav_item_inbox)
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerView, new SentFragment()).commit();
if (menuItem.getItemId() == R.id.teilen)
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "✶Angela Merkel Soundboard✶");
shareIntent.putExtra(Intent.EXTRA_TEXT, "✶Hol dir das Angela Merkel Soundboard mit Merkels besten Sprüchen✶\n\nhttps://play.google.com/store/apps/details?id=com.aaron.waller.angelasoundboard&hl=de");
startActivity(Intent.createChooser(shareIntent, "Teilen über..."));
if (menuItem.getItemId() == R.id.nav_item_inbox)
FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
xfragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();
if (menuItem.getItemId() == R.id.instagram)
String url = "https://instagram.com/_u/coding.empire/?r=sun1";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.freshtorge)
String url = "https://play.google.com/store/apps/details?id=com.penta.games.freshtorgesoundboard&hl=de";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.tanzverbot)
String url = "https://play.google.com/store/apps/details?id=com.aaron.waller.tanzverbotsoundboard&hl=de";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.elotrix)
String url = "https://play.google.com/store/apps/details?id=com.penta.games.elotrixsoundboard&hl=de";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.gronkh)
String url = "https://play.google.com/store/apps/details?id=com.aaron.waller.gronkhsoundboard&hl=de";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.dummefage)
String url = "https://play.google.com/store/apps/details?id=com.penta.games.dummefragenet&hl=de";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
onPause();
startActivity(intent);
if (menuItem.getItemId() == R.id.email)
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", "pentagames.business@gmail.com", null));
;
startActivity(Intent.createChooser(emailIntent, "E-Mail senden..."));
return false;
);
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name,
R.string.app_name);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
我也试过把android:theme="@android:style/Theme.Translucent"
改成
android:theme="@style/AppTheme"
然后我得到以下错误:
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute activity#com.google.android.gms.ads.AdActivity@theme value=(@style/AppTheme) from AndroidManifest.xml:28:13-44
is also present at [com.google.android.gms:play-services-ads-lite:10.2.0] AndroidManifest.xml:25:182-230 value=(@android:style/Theme.Translucent).
Suggestion: add 'tools:replace="android:theme"' to <activity> element at AndroidManifest.xml:26:9-28:47 to override.
这是 GitHub 上的项目: https://github.com/Penta-Games/AngelaMerkel
【问题讨论】:
查看link 如果找不到任何错误,请转到 Build>Clean Project 或尝试 Build>Rebuild Project。 @Basi 答案说我必须用“Activity”更改“ActionBarActivity”,但我在哪里可以找到“ActionBarActivity”? 发布您的MainActivity
课程
@FAT 我在我编辑的问题中发布了它
【参考方案1】:
主要问题在于您的styles.xml
文件。
在您的应用程序中,您只在/res/values-v21
文件夹中添加了styles.xml
,它仅适用于API
级别的21 (LOLLIPOP)
和higher
版本。
由于values
文件夹中没有常见的style.xml
,并且您还没有为lower API
版本声明任何特定的styles
,这就是为什么它显示IllegalStateException
用于较低版本的原因,例如API 18
,即Android 4.3 (JELLY_BEAN_MR2)
.
解决方案:
在您的/res/values
文件夹中添加一个通用styles.xml
。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
仅供参考,您的AndroidManifest.xml
没有问题。一切似乎都很好。您应该使用Theme.Translucent
代替"com.google.android.gms.ads.AdActivity"
。
希望这会奏效~
【讨论】:
哇,非常非常感谢!感谢您的时间和努力。像魅力一样工作:)【参考方案2】:You need to use a Theme.AppCompat theme (or descendant) with this activity.
在您声明活动的Manifest.xml
中,替换主题配置:android:theme="@android:style/Theme.Translucent"
带有:android:theme="@style/AppTheme"
(或任何其他从 Theme.AppCompat
降级的主题,正如错误消息所示)。
【讨论】:
我试过这个,但我收到一条错误消息(看看我编辑的问题)以上是关于Android Studio:无法启动活动组件信息的主要内容,如果未能解决你的问题,请参考以下文章
无法识别启动活动:升级到 Android Studio 4.0 后未找到默认活动
Android Studio无法启动活动性ComponentInfo