NullPointerException(没什么用)

时间:2017-05-16 04:09:21

标签: java android android-studio nullpointerexception

在同样的问题上有很多答案。我尝试了所有这些。大多数人指出将ActionBarActivity的活动更改为将getAction更改为getSupportAction。但没有什么对我有用。

这个问题有解决方法吗?

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setLogo(R.drawable.logo_share);
    getSupportActionBar().setDisplayUseLogoEnabled(true);
    setContentView(R.layout.activity_main);
  }
}
setDisplayShowEnabled上的

例外

6 个答案:

答案 0 :(得分:2)

如果您开始使用ActionBar,这是一个常见问题。

这是解决问题的步骤:

  1. 检查您的活动是否使用了正确的主题。每个活动声明都在AndroidManifest.xml中。像这样:

    <activity
        android:name="com.yourpackage.MainActivity"
        android:label="@string/app_name"
        android:theme="Theme.AppCompat.Light.DarkActionBar">
    

    如果你找到像@style这样的主题:

    <activity
        android:name="com.yourpackage.MainActivity"
        android:label="MainActivity"
        android:theme="@style/AppTheme.NoActionBar">
    

    然后您需要检查项目中的样式资源。

  2. 检查您的活动布局。

    如果您创建从Android Studio生成的项目,则应该具有以下内容:

    <android.support.design.widget.CoordinatorLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:fitsSystemWindows="true">
    
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
    
       <android.support.design.widget.AppBarLayout
           android:id="@+id/activity_app_bar_layout"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:theme="@style/AppTheme.AppBarOverlay">
    
         <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/AppTheme.PopupOverlay"/>
    
       </android.support.design.widget.AppBarLayout>
    
       <!--- Here Your Layout -->
    
    
     </RelativeLayout>
    
  3. 您会看到有一个视图android.support.v7.widget.Toolbar toolbar。这意味着您需要绑定Activity中的工具栏。像这样:

    public class MainActivity extends AppCompatActivity {
    
      private Toolbar mToolbar;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mToolbar = (ToolBar)findViewById(R.id.toolbar);
    
        // then you can set the toolbar
        setSupportActionBar(mToolbar);
      }
    }
    

答案 1 :(得分:1)

在setDisplayHomeAsUpEnabled之前检查getSupportActionBar()是否为null。

if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

答案 2 :(得分:1)

使用SupportActionBar。你必须遵循以下步骤

  • 您的活动主题是NoActionBar
  • 将android.support.v7.widget.Toolbar包含在您的激活布局中
  • 在getSupportActionBar
  • 之前调用setSupportActionBar

请删除setContentView(R.layout.activity_main);在onCreate方法结束时。

答案 3 :(得分:1)

在activity_main xml中添加工具栏:

('TreeControl'->'TabItemControl'->'ScrollBarControl').

添加

  <include
            android:id="@+id/toolbar"
            layout="@layout/layout_custom_toolbar" />

对于Style:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/MyCustomToolbarPopup"
app:theme="@style/MyCustomToolbar">

<!-- This is a centered title -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/toolbar_title"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:textColor="@android:color/white"
        android:textSize="@dimen/font_18sp"
        android:text=""
        android:visibility="visible" />


</LinearLayout>

并在“创建方法设置工具栏”

    <!--to customise tool bar widgets-->
<style name="MyCustomToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <!--color for the title of toolbar-->
    <item name="android:textColorPrimary">@android:color/white</item>
    <!--color for the toolbar icons-->
    <item name="android:textColorSecondary">@color/colorAccent</item>
    <!-- <item name="actionMenuTextColor">@color/transparent_white</item>-->
</style>


<!--Toolbar Popup-->
<style name="MyCustomToolbarPopup" parent="ThemeOverlay.AppCompat.Light">
    <!--color for the title of toolbar-->
    <item name="android:textColorPrimary">@color/color_576069</item>
    <!--color for the toolbar icons-->
    <item name="android:textColorSecondary">@color/color_576069</item>
</style>

答案 4 :(得分:1)

这是最简单的ONE LINE解决方案。

我认为你的价格低于java.lang.NullPointerException

  

android.support.v7.app.ActionBar.setDisplayShowHomeEnabled(boolean):尝试调用虚方法'void   getSupportActionBar()”   在空对象引用上

<强>说明

#。当您使用AppCompat时,您必须为包含MainActivity的{​​{1}}设置至少一个ActionBar主题。

例如:

您可以在themes下面使用ActionBar

Theme.AppCompat
Theme.AppCompat.Light 
Theme.AppCompat.Light.DarkActionBar

#。根据您的comment,这是您的styles.xml

<resources> 
    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
        <!-- Customize your theme here. --> 
        <item name="colorPrimary">@color/colorPrimary</item> 
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
        <item name="colorAccent">@color/colorAccent</item> 
    </style> 
</resources>

<强> SOLUTION:

只需将此AppTheme设置为MainActivity中的AndroidManifest.xml

<activity
    android:name=".MainActivity"
    android:theme="@style/AppTheme">

    ...............
    ....................
</activity>

仅供参考,我已尝试使用此功能并且功能完美。

<强>输出:

enter image description here

希望这会有所帮助〜

答案 5 :(得分:0)

将此主题用于您的活动:

        android:theme="@android:style/Theme.Holo.Light.DarkActionBar"