首页 文章

无法在MainActivity(NullPointerException)中更改ActionBar的颜色? [重复]

提问于
浏览
-1

这个问题在这里已有答案:

I've already looked at some questions over here regarding this issue but for so far, nothing seems to be doing it for me .

我正在尝试一些东西,我想在MainActivity中更改ActionBar的颜色而不是XML文件 .

我仍然是Android开发的新手,所以我很抱歉,如果发生这种情况最终会成为一个小错误 . 我的代码如下(注释显示错误的位置) . 知道我为什么会得到“NullPointerException”吗?非常感谢你:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (Build.VERSION.SDK_INT >= 11) {
        ActionBar bar = getActionBar();
        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff"))); // May produce "NullPointerException"
    }
}

EDIT :@Huy N.这是截图 .
enter image description here

EDIT 2 :这是我的"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>

还有我的“activity_main.xml”

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.myname.checktime.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/testText"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

EDIT 3 :这是我的Android Manifest文件,主题在"android:theme"下应用 .

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

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

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

EDIT 4

Just ran it on my phone and it works on mine now . 顺便说一下,我在API 22上 . 它有效 but will the "NullPointerException" possibly be a problem later? 如果我忽略它是否安全?这些是我的记录 . 我把它们放在pastebin中是因为我不能让它们看起来很好看 . 这是我第一次连接手机时的logcat:

pastebin.com/908utuab

这是在我运行应用程序之后 .

pastebin.com/7Lf7Djev

对于那些无法查看Pastebin的人来说,这是我在这里获取我的logcats所能做的最好的事情 . 我尝试了 code 格式,但它会识别我的logcat的一部分,并将其余部分保留为纯文本 .

这是通过“之前”logcat(插入手机后) .

06-25 02:42:22.640 18537-18537 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:18537 java.lang.RuntimeException:无法实例化活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:java.lang . NullPointerException:尝试在android.app上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2250)上的空对象引用上调用虚拟方法'android.view.Window $ Callback android.view.Window.getCallback()' . Activity.Thread.handleLaunchActivity(ActivityThread.java:2413)在Android.app.Handler的android.app.ActivityThread.access $ 800(ActivityThread.java:155)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317) . dispatchMessage(Handler.java:102)位于android.app.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5343),位于java.lang.reflect.Method.invoke(Native方法)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.jav) a:905)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:java.lang.NullPointerException:尝试调用虚方法'android.view.Window $ Callback android.view.Window .getCallback()'在android.support.v7.app.AppCompatDelegateImplBase上的空对象引用 . (AppCompatDelegateImplBase.java:68)在android.support.v7.app.AppCompatDelegateImplV7 . (AppCompatDelegateImplV7.java:146)android.support .s7.app.AppCompatDelegateImplV11 . (AppCompatDelegateImplV11.java:28)位于android.support.v7.app.AppCompatDelegateImplV14 . (AppCompatDelegateImplV14.java:41)android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190) )在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172)的android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:512)android.support.v7.app.AppCompatActivity上的android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172) . findViewById(AppCompatActivity.java:184)位于java.lang.reflect.Construc的com.myname.checktime.MainActivity . (MainActivity.java:17) android.app.ActivityThread.performLaunchActivity(ActivityThread.java)中android.app.Instrumentation.newActivity(Instrumentation.java:1089)的java.lang.Class.newInstance(Class.java:1606)中的tor.newInstance(Native Method) 2240)在Android.app.A活动时,Android.app.A活动(活动传递 . 密码:1313)在android.app.ActivityThread.access $ 800(ActivityThread.java:155)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)在android.os.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:135),位于java.lang的android.app.ActivityThread.main(ActivityThread.java:5343) . 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)上的java.lang.reflect.Method.invoke(Method.java:372)中的reflect.Method.invoke(Native Method) . android.internal.os.ZygoteInit.main(ZygoteInit.java:700)06-25 02:43:33.211 18832-18832 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:18832 java.lang.RuntimeException:无法实例化活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:java.lang.NullPointerException:尝试在空对象上调用虚方法'android.view.Window $ Callback android.view.Window.getCallback()'在Android.app.A活动时,Android.A.运行时,Android.app.A活动时,我会在android.app.A活动时看到android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2250)android.app.ActivityThread.access $ 800(ActivityThread.java:155) . app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)位于android.app.ActivityThread的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:135) .main(ActivityThread.java:5343)位于java.lang.reflect.Method.invoke(Native Method)的java.lang.reflect.Method.invoke(Method.java:372),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:java.lang.NullPointerException:尝试调用虚拟m ethod'android.view.Window $回调android.view.Window.getCallback()'在android.support.v7.app.AppCompatDelegateImplBase上的空对象引用 . (AppCompatDelegateImplBase.java:68)在android.support.v7.app位于android.support.v7.app.AppCompatDelegateImplV11的.AppCompatDelegateImplV7 . (AppCompatDelegateImplV7.java:146 . )android.support.v7.app.AppCompatDelegateImplV14 . (AppCompatDelegateImplV14.java:41)android.support位于android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java)的android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172)上的.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190) :512)at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:184)at com.myname.checktime.MainActivity . (MainActivity.java:17)at java.lang.reflect.Constructor.newInstance(Native方法)在android.app.Instrumentation.newActivity(Instrumentation.jav)的java.lang.Class.newInstance(Class.java:1606) a:1089)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2240)在android.app.ActivityThread.access $ 800(ActivityThread.java:155)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在android.app.A.运行时android.O.上运行android.os.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317) . app.ActivityThread.main(ActivityThread.java:5343)位于java.lang.reflect.Method.invoke(Native Method),位于com.android.internal的java.lang.reflect.Method.invoke(Method.java:372) . os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)06-25 03:39:12540 27233-27233 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:27233 java.lang.RuntimeException:无法启动活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:android.content . res.Resources $ NotFoundException:android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)android.app.ActivityThread.access $ 800的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)中的字符串资源ID#0x3 (ActivityThread.java:155)在android.app.A.运行时,Android.O.Roper.loop(Looper)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)位于android.os.Handler.dispatchMessage(Handler.java:102) . java:135)在android.app.ActivityThread.main(ActivityThread.java:5343)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:android . content.res.Resources $ NotFoundException:位于com.myname的android.widget.Toast.makeText(Toast.java:285)的android.content.res.Resources.getText(Resources.java:299)中的字符串资源ID#0x3 . android.app.ActivityThread.performLaunchActivity上android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)的android.app.Activity.performCreate(Activity.java:6010)上的checktime.MainActivity.onCreate(MainActivity.java:24) (ActivityThread.java:2292)在Android.app.ActivityThread.access $ 800(ActivityThread.java:155)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)android.app.ActivityThread $ H.handleMessage(ActivityThread) .java:1317)在android.os.Handler.dispatchMessage(Handler.java:102)atandroid.os.Looper.loop(Looper.java:135)位于java.lang.reflect的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5343) . 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)上的Method.invoke(Method.java:372) 06-25 03:51:57.799 2603-2603 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:2603 java.lang.RuntimeException:无法启动活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:java.lang . NullPointerException:尝试在android.app上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)上的空对象引用上调用虚方法'void android.app.ActionBar.setBackgroundDrawable(android.graphics.drawable.Drawable)' .ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在Android.app.Handler的android.app.ActivityThread.access $ 800(ActivityThread.java:155)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317) .dispatchMessage(Handler.java:102)位于android.app.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5343),位于java.lang.reflect.Method.invoke(本地方法)在java.lang.reflect.Method.invoke(Method.java:372)的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:java.lang.NullPointerException:尝试调用虚方法'void android.app.ActionBar.setBackgroundDrawable( android.appics.drawable.Drawable)'在Android.app的android.app.Activity.performCreate(Activity.java:6010)的com.myname.checktime.MainActivity.onCreate(MainActivity.java:32)上的空对象引用.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)android.app.ActivityThread.access $ 800 (ActivityThread.java:155)在android.app.A.运行时,Android.O.Roper.loop(Looper)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)位于android.os.Handler.dispatchMessage(Handler.java:102) . java:135)在java.lang.ref的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5343) lect.Method.invoke(Method.java:372)位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 700)06-25 04:24:41.901 25850-25850 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:25850 java.lang.RuntimeException:无法启动活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:java.lang . NullPointerException:尝试在android.app上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)上的空对象引用上调用虚方法'void android.app.ActionBar.setBackgroundDrawable(android.graphics.drawable.Drawable)' .ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在Android.app.Handler的android.app.ActivityThread.access $ 800(ActivityThread.java:155)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317) .dispatchMessage(Handler.java:102)位于android.app.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5343),位于java.lang.reflect.Method.invoke(本地方法)在java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.ru n(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:java.lang.NullPointerException:尝试调用虚方法'void android.app.ActionBar.setBackgroundDrawable (android.graphics.drawable.Drawable)'在Android上的android.app.Activity.performCreate(Activity.java:6010)的com.myname.checktime.MainActivity.onCreate(MainActivity.java:33)上的空对象引用上 . 位于android.app.A活动中的android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2292)的app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129),android.app.ActivityThread.access的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在Android.os.Looper.loop(Looper)的android.app.Handler.dispatchMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)$ 800(ActivityThread.java:155) .java:135)atandroid.app.ActivityThread.main(ActivityThread.java:5343)位于com.android的java.lang.reflect.Method.invoke(Method.java:372)的java.lang.reflect.Method.invoke(Native Method)中 . internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)06-25 12:53:52.375 15340-15340 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.myname.checktime,PID:15340 java.lang.RuntimeException:无法启动活动ComponentInfo {com.myname.checktime / com.myname.checktime.MainActivity}:java.lang . NullPointerException:尝试在android.app上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)上的空对象引用上调用虚方法'void android.app.ActionBar.setBackgroundDrawable(android.graphics.drawable.Drawable)' .ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在Android.app.Handler的android.app.ActivityThread.access $ 800(ActivityThread.java:155)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317) .dispatchMessage(Handler.java:102)位于android.app.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5343),位于java.lang.reflect.Method.invoke(本地方法)在java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.ru n(ZygoteInit.java:905)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)引起:java.lang.NullPointerException:尝试调用虚方法'void android.app.ActionBar.setBackgroundDrawable (android.graphics.drawable.Drawable)'在Android上的android.app.Activity.performCreate(Activity.java:6010)的com.myname.checktime.MainActivity.onCreate(MainActivity.java:33)上的空对象引用上 . 位于android.app.A活动中的android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2292)的app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129),android.app.ActivityThread.access的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)在Android.os.Looper.loop(Looper)的android.app.Handler.dispatchMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1317)$ 800(ActivityThread.java:155) .java:135)在java.lang.re的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5343) flectod.invoke(Method.java:372)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 700)

“之后”Logcat

enter image description here

2 回答

  • 0

    你试过这个吗?

    ActionBar actionBar = getSupportActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#95CDBA")));
            actionBar.setTitle(Html.fromHtml("<font color='#000099'>Hello World</font>"));
    
  • 0

    我从您发布的内容中看到的只是IDE中的警告 . 我不想阻止你修复它,因为你可能应该,但是应用程序实际上是因为这个错误而崩溃,还是你刚收到警告?

相关问题