2014-12-01 117 views
-1

我一直在試圖寫一個應用程序的臉,當它開始說話時打開它的嘴巴,當它結束時關閉它的嘴巴。我的文本到語音引擎工作正常,但是當我添加代碼來更改圖像時,我的應用程序崩潰。我的所有圖像都是res/drawable,而且我確信我的圖像的id是正面的。是什麼導致了這個問題?Android應用程序崩潰ImageView.setImageResource與NullPointerException

Java代碼:

private void speak(String text) { 
    ImageView face = (ImageView) findViewById(R.id.face); 
    face.setImageResource(R.drawable.face2); //App crashes when this code is added 
    jane.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    while (jane.isSpeaking()) { 

    } 
    face.setImageResource(R.drawable.face1); //App also crashes with this code 
} 

的logcat:

12-01 14:44:14.351: I/TextToSpeech(18150): Sucessfully bound to com.samsung.SMT 
12-01 14:44:14.381: I/TextToSpeech(18150): Connected to ComponentInfo{com.samsung.SMT/com.samsung.SMT.SamsungTTSService} 
12-01 14:44:14.401: I/TextToSpeech(18150): Set up connection to ComponentInfo{com.samsung.SMT/com.samsung.SMT.SamsungTTSService} 
12-01 14:44:14.421: I/Adreno-EGL(18150): <qeglDrvAPI_eglInitialize:381>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050_msm8960_refs/tags/AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050__release_AU() 
12-01 14:44:14.421: I/Adreno-EGL(18150): OpenGL ES Shader Compiler Version: 17.01.12.SPL 
12-01 14:44:14.421: I/Adreno-EGL(18150): Build Date: 03/28/14 Fri 
12-01 14:44:14.421: I/Adreno-EGL(18150): Local Branch: 
12-01 14:44:14.421: I/Adreno-EGL(18150): Remote Branch: refs/tags/AU_LINUX_ANDROID_KK_2.7_RB1.04.04.02.007.050 
12-01 14:44:14.421: I/Adreno-EGL(18150): Local Patches: NONE 
12-01 14:44:14.421: I/Adreno-EGL(18150): Reconstruct Branch: NOTHING 
12-01 14:44:14.461: D/OpenGLRenderer(18150): Enabling debug mode 0 
12-01 14:44:17.905: D/AndroidRuntime(18150): Shutting down VM 
12-01 14:44:17.905: W/dalvikvm(18150): threadid=1: thread exiting with uncaught exception (group=0x41813da0) 
12-01 14:44:17.905: E/AndroidRuntime(18150): FATAL EXCEPTION: main 
12-01 14:44:17.905: E/AndroidRuntime(18150): Process: com.nerdologylabs.jane, PID: 18150 
12-01 14:44:17.905: E/AndroidRuntime(18150): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.nerdologylabs.jane/com.nerdologylabs.jane.MainActivity}: java.lang.NullPointerException 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread.deliverResults(ActivityThread.java:3700) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3743) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread.access$1400(ActivityThread.java:172) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.os.Handler.dispatchMessage(Handler.java:102) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.os.Looper.loop(Looper.java:146) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread.main(ActivityThread.java:5653) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at java.lang.reflect.Method.invokeNative(Native Method) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at java.lang.reflect.Method.invoke(Method.java:515) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at dalvik.system.NativeStart.main(Native Method) 
12-01 14:44:17.905: E/AndroidRuntime(18150): Caused by: java.lang.NullPointerException 
12-01 14:44:17.905: E/AndroidRuntime(18150): at com.nerdologylabs.jane.MainActivity.speak(MainActivity.java:73) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at com.nerdologylabs.jane.MainActivity.onActivityResult(MainActivity.java:88) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.Activity.dispatchActivityResult(Activity.java:5734) 
12-01 14:44:17.905: E/AndroidRuntime(18150): at android.app.ActivityThread.deliverResults(ActivityThread.java:3696) 
12-01 14:44:17.905: E/AndroidRuntime(18150): ... 11 more 
12-01 14:44:19.327: I/Process(18150): Sending signal. PID: 18150 SIG: 9 
+1

'face'可能爲空。 – Pokechu22 2014-12-01 19:40:14

+0

請添加您的日誌。 – Chefes 2014-12-01 19:40:58

回答

0

ImageView face = (ImageView) findViewById(R.drawable.face);

此行應該用你的圖像視圖的ID在佈局,而不是繪製。它應該是這樣的:

ImageView face = (ImageView) findViewById(R.id.my_image_view);

0

無論是臉部或face2爲空。檢查你是否有臉部和face2可繪製的,並檢查它們是否沒有損壞。

1

Chesck此代碼。

ImageView face = (ImageView) findViewById(R.drawable.face); 
if (face != null) { 
    Drawable drawable= getResources().getDrawable(R.drawable.face2); 
    if (drawable != null) { 
     img.setImageDrawable(drawable); 
    } 
} 

如果您仍有問題,只需添加評論。

+0

我試過上面的代碼,它仍然給出了一個空指針異常。我在我的res/drawable文件夾中有所有的圖像。 – user3499799 2014-12-01 19:52:46

+0

我重命名了我的圖片,並沒有崩潰。但是,圖像沒有改變。 – user3499799 2014-12-01 19:59:14

+0

我編輯帖子,請再次檢查,並在if(drawable!= null)中添加一個breackpoint來檢查代碼是否正在執行。 – Chefes 2014-12-01 20:15:56