2016-12-31 121 views
-2

我在尝试调用一个方法上的一个按钮,当一个NullPointerException异常:NullPointerException:尝试调用空对象引用上的虚方法?

private FButton fButton1; 
... 
... 
fButton1 = (FButton) findViewById(R.id.FButton1); 
fButton1.setButtonColor(ContextCompat.getColor(this, fbutton_color_turquoise)); //Exception here 

我使用this library here,我不知道为什么我得到的异常?

错误日志:

FATAL EXCEPTION: main 
                Process: com.user.app, PID: 11209 
                java.lang.RuntimeException: Unable to start activity ComponentInfo{com.user.app/com.user.app.activities.StartUpScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'void info.hoang8f.widget.FButton.setButtonColor(int)' on a null object reference 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                 at android.os.Looper.loop(Looper.java:148) 
                 at android.app.ActivityThread.main(ActivityThread.java:5417) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void info.hoang8f.widget.FButton.setButtonColor(int)' on a null object reference 
                 at com.user.app.activities.StartUpScreen.onCreate(StartUpScreen.java:44) 
                 at android.app.Activity.performCreate(Activity.java:6237) 
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                 at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                 at android.os.Handler.dispatchMessage(Handler.java:102)  
                 at android.os.Looper.loop(Looper.java:148)  
                 at android.app.ActivityThread.main(ActivityThread.java:5417)  
                 at java.lang.reflect.Method.invoke(Native Method)  
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

我layout.xml其中FButton是:

<info.hoang8f.widget.FButton 
    fbutton:buttonColor="@color/fbutton_color_turquoise" 
    fbutton:shadowColor="@color/fbutton_color_green_sea" 
    fbutton:shadowEnabled="true" 
    fbutton:shadowHeight="5dp" 
    android:text="Celcius" 
    android:textColor="#FFF" 
    fbutton:cornerRadius="5dp" 
    android:layout_marginTop="8dp" 
    app:layout_constraintTop_toBottomOf="@+id/imageButton3" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    android:layout_height="wrap_content" 
    android:layout_marginStart="8dp" 
    android:layout_width="match_parent" 
    android:id="@+id/FButton1" 
    app:layout_constraintRight_toLeftOf="@+id/FButton2" 
    android:layout_marginRight="8dp" 
    android:layout_marginEnd="8dp" 
    app:layout_constraintHorizontal_bias="1.0" /> 

我ids.xml文件,我不得不创建,由于Android没有recoginze的ID:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item name="FButton1" type="id" /> 
</resources> 
+0

写完整的调用堆栈 – Vyacheslav

+0

@Vyacheslav完成编辑下的检查! – Carlton

+0

@AndyTurner这个NullPointerException没有任何意义,所有其他视图在我的代码中以这种方式声明,它们都工作得很好。 – Carlton

回答

1

看来你的fButton1为空。 只需检查你调用findViewById,并检查你的xml文件,这个元素是否真的存在

+0

创建FButton时,它可能与Android Studio“找不到id”有关吗?我不得不创建一个'ids.xml'文件并添加''所以我的'findViewById()','ids.xml'和' layout.xml'都一样,但它仍然抛出相同的异常,任何想法? – Carlton

1

你的错误是在设置按钮颜色,使用此来以编程方式更改按钮的颜色。

setBackgroundColor(getResources().getColor(R.color.holo_light_green)) 

还有一件事,从Android的支持库-23的getColor方法开始已被弃用,因此改用这种

ContextCompat.getColor(context, R.color.your_color); 

因此支持所有的版本使用,

public static final int getColor(Context context, int id) 
{ 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 23) { 
     return ContextCompatApi23.getColor(context, id); 
    } 
    else { 
     return context.getResources().getColor(id); 
    } 
} 
+0

'getColor'折旧,并且来自同一个库的所有其他方法也不起作用。我得到同样的例外。 – Carlton

+0

我认为它回答你的问题 –

相关问题