2016-12-31 123 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

我認爲它回答你的問題 –

相關問題