java - 在计算机之间移动后启动应用程序时出现 IllegalStateException

标签 java android xml themes

tl;博士

这些确切的文件可以在一台工作站上运行,而不能在另一台工作站上运行。

我得到什么(错误)

FATAL EXCEPTION: main                                                  

  java.lang.RuntimeException: Unable to start activity 
  ComponentInfo{com.example.erik.recipefriend2/com.example.erik.recipefriend2.MainActivity}: 
  java.lang.IllegalStateException: You need to use a 
  Theme.AppCompat theme (or descendant) with this activity.

错误出现在第 26 行,在我的例子中是这样的:

setSupportActionBar(toolbar);

我所做的 正如主题所述,我已将 Android Studio 项目从固定计算机转移到笔记本电脑上。我一直将 Git 与 Bitbucket 结合使用,以便能够在两台计算机上工作。当我拉出该项目并尝试运行它时,我收到了上面显示的错误消息。当我从固定计算机上压缩该项目并解压并在笔记本电脑上启动它时,我遇到了同样的错误。最后,我将各个文件(类文件、drawables 和 xml 文件)粘贴到新创建的项目中,但仍然收到错误。

我的想法已经用完了。我还逐行检查了我的固定计算机上的类(class),并将它们与我的笔记本电脑上的类(class)进行了比较,但无济于事。

我将包含我认为与此问题相关的类和 xml。

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="android:actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="ThemeOverlay.RecipesApp" parent="Theme.AppCompat.NoActionBar">
    <item name="android:colorBackground">@color/colorGreen</item>
    <item name="android:textColor">#FFFFFF</item>
</style>

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_menu_white_24dp</item>


</style>


</resources>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.erik.recipefriend2">

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

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

</manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout     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"
android:fitsSystemWindows="true"
tools:context="com.example.erik.recipefriend2.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.RecipesApp" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/addIngredient"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="16dp"
    app:backgroundTint="#91FF93"
    android:tint="#FFFFFF"
    android:onClick="goToAdd"
    android:scaleType="fitCenter"
    android:src="@android:drawable/ic_input_add" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/searchRecipe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="#91FF93"
    android:src="@android:drawable/ic_search_category_default"
    android:layout_margin="16dp"
    android:tint="#FFFFFF"
    android:scaleType="fitCenter"
    android:onClick="goToSearch"
    android:layout_gravity="bottom|left"
    />


</android.support.design.widget.CoordinatorLayout>

MainActivity.java

package com.example.erik.recipefriend2;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuInflater;
import android.view.View;
import android.view.Menu;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {



   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       toolbar.setTitleTextColor(Color.WHITE);
       setSupportActionBar(toolbar);
       android.support.v7.app.ActionBar actionBar = getSupportActionBar();
       actionBar.setLogo(R.mipmap.ic_launcher);
       actionBar.setDisplayUseLogoEnabled(true);
       actionBar.setDisplayShowHomeEnabled(true);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.addIngredient);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu){
       MenuInflater menuInflater = getMenuInflater();
       menuInflater.inflate(R.menu.activity_main_actions, menu);
       return super.onCreateOptionsMenu(menu);
   }
   @Override
      protected boolean onPrepareOptionsPanel(View view, Menu menu) {
      if (menu != null) {
        if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
            try {
                Method m = menu.getClass().getDeclaredMethod(
                        "setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch (Exception e) {
                Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e);
            }
        }
    }
    return super.onPrepareOptionsPanel(view, menu);
   }
   public void goToAdd(View view){

   }
   public void goToSearch(){

   }


}

问题可能是什么?另外,如果需要更多文件,我也很乐意显示它们。

最佳答案

在您的 Activity 中,您可以定义 android:theme="@style/AppTheme.NoActionBar",但您无需在样式中的任何位置定义 AppTheme.NoActionBar。编译起来令人困惑,但可以解释为什么会出现错误。

关于java - 在计算机之间移动后启动应用程序时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258947/

相关文章:

javascript - 如何在cocos creator javascript中使用sqlite数据库

java - 循环绘制字符串未出现在 JFrame 中

java - 在 Java 代码中复制 Maven 依赖项

java - 所有 jComboBoxes 都互相镜像

java - 当单击按钮从网络加载图像时,如何防止表单卡住?

java - 替换并刷新 ScrollPane 中的旧 JXTreeTable

android - android web 浏览器使用什么来播放音频流?媒体播放器还是别的?

android - Windows Phone 7 中与 android.app.Service 相关的内容

android - 如何安排与手机宽度相等的按钮?

Android - 我似乎没有 ANIM 文件夹或 MAINANIM.xml 文档...这是为什么?