2011-11-24 24 views
0

我不知道該在哪裏轉,我正在關注一個Android教程here,並且在最新的更新中,我得到一個運行時錯誤並且我真的很努力地找到它的來源!診斷「RuntimeException:無法啓動活動引發java.lang.NullPointerException」

我的目標是在左上方的屏幕上出現一個小的「球形」圖標,玩家可以在表面上拖放。

現在我只對程序進行了一些更改,因爲我上次編譯成功。所有這些都在GameView類中,您可以在這裏看到:http://pastebin.com/zsYKFmuP。而且我還創建了一個全新的班級叫做Orb,這裏是:http://pastebin.com/wQKqcVtV

如果你有使用android開發的經驗,那麼查看我的代碼不應該太麻煩,不過我感謝任何花時間做出任何建議的人!所有的意見將不勝感激!

的logcat中有這樣一段話:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{biz.hireholly.tutorial/biz.hireholly.tutorial.MainActivity}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3701) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at biz.hireholly.tutorial.models.Orb.<init>(Orb.java:13) 
    at biz.hireholly.tutorial.GameView.<init>(GameView.java:34) 
    at biz.hireholly.tutorial.MainActivity.onCreate(MainActivity.java:25) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
    ... 11 more 

Orb類相關來源:

public class Orb { 

     private Bitmap bitmap; //image 
     private int x; //x coord 
     private int y; //y coord 
     private boolean touched; //if orb is touched/picked up 
     //just to make things simpler to read 
     int halfBmpX = bitmap.getWidth() /2; // <<<=== Line 13 
     int halfBmpY = bitmap.getHeight() /2; 

回答

2

Orb類嘗試從null參考初始化halfBmpX(和Y)。

該初始化應該在之後的構造函數中發生,你有一個有效的Bitmap來初始化。

public Orb(Bitmap bmp, int x, int y) { 
    this.bitmap = bmp; 
    this.x = x; 
    this.y = y; 
    halfBmpX = bmp.getWidth()/2; 
    halfBmpY = bmp.getHeight()/2; 
} 

說明:在上課開始的初始化都運行構造函數運行以前,所以bitmap不存在作爲比null參考其他任何東西。

+0

DOH!這樣愚蠢的錯誤!我得到了許多正確的答案,我很感謝大家看看! – Holly

+0

@霍利它發生了:)但是,在未來,最好提供有問題的來源以避免對它進行挖掘 - 我們很懶惰。 –

2

你嘗試調用位圖的方法就被分配之前,它仍然是null

int halfBmpX = bitmap.getWidth() /2; 

您應該下面兩行移動你的構造函數中:

halfBmpX = bitmap.getWidth() /2; 
halfBmpY = bitmap.getHeight() /2; 

,並保持在構造函數外聲明它們:

int halfBmpX, halfBmpY; 
+0

不是'int'部分,否則它們將是本地的。 –

+0

@DᴀᴠᴇNᴇᴡᴛᴏɴ - 是的,複製並粘貼錯誤。謝謝! – MByD

1

你有下面的代碼在你的Orb類:

private Bitmap bitmap; //image 
private int x; //x coord 
private int y; //y coord 
private boolean touched; //if orb is touched/picked up 
//just to make things simpler to read 
int halfBmpX = bitmap.getWidth() /2; 
int halfBmpY = bitmap.getHeight() /2; 

你做了兩個引用到bitmap對象,而無需對其進行初始化。相反,您應該在構造函數中設置halfBmpXhalfBmpY

1

在您的ORB類的Line 13 & 14你這樣做

int halfBmpX = bitmap.getWidth() /2; 
int halfBmpY = bitmap.getHeight() /2; 

bitmap尚未初始化,併爲空因此空指針異常。

在初始化bitmap後,將bitmap.getWidth() /2;位移動到構造函數中。

相關問題