2013-03-11 43 views
0

我有一個Android遊戲(內置cocos2dx),這是最近公佈,谷歌正與以下異常,通知我啓動崩潰:安卓:沒有上下文顯示彈出

java.lang.ExceptionInInitializerError 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1409) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3683) 
    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:839) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.UnsatisfiedLinkError: Couldn't load game: findLibrary returned null 
    at java.lang.Runtime.loadLibrary(Runtime.java:429) 
    at java.lang.System.loadLibrary(System.java:554) 
    ... 

這似乎是發生在這種方法:

static { 
    System.loadLibrary("game"); 
} 

我做了一些研究,看來,這可能是一個數量的問題,即使該應用程序在安裝過程中得到某種方式破壞的結果。我想向用戶顯示一個對話框,並要求他們重新下載應用程序。我可以在System.loadLibrary調用中添加一個try/catch,但不知道如何在沒有上下文的情況下執行任何操作。我不認爲我有一個,因爲這是在我的主Activity中調用onCreate()之前調用的。

有關如何通知用戶嘗試重新下載的任何想法?

謝謝!

回答

0

爲您的dialog另建Activity。在你manifestActivity指定

android:theme="@android:style/Theme.Dialog" 

這會讓你ActivityDialog的外觀,但給你更多的靈活性。您可以在此Activity中使用AlertDialog.Builder來顯示您的Dialog,然後根據需要從中執行任何操作。您需要Context作爲Dialog

+0

我是否還必須在代碼中實際創建活動?我將如何去調用它來調用AlertDialog.Builder代碼? – fffanatics 2013-03-12 00:10:58

+0

如果我理解正確,您希望這是第一個顯示的屏幕,對不對? – codeMagic 2013-03-12 00:12:31

+0

我遇到的問題是System.loadLibrary()調用拋出UnsatisfiedLinkError異常(這是可能的)。從我讀過的內容來看,其中一個原因是Google Play商店中的安裝損壞/損壞。我想向用戶顯示一條消息,並重定向它們以重新安裝。 – fffanatics 2013-03-12 00:18:53

0

我改變庫名稱時遇到同樣的問題。我想你是在NDK下編程的。因此,在您CMakeLists.txt文件檢查,如果你有這樣的:

cmake_minimum_required(VERSION 3.4.1) 
project(project_name) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") 
... 
add_library(*game* SHARED gl_code.cpp) 
... 
target_link_libraries(*game* ...) 

PS:沒有「*」

PS2:我不知道cocos2dx但我看到他們的網頁,它是C++,所以你在本地編程,loadLibrary中的錯誤意味着Java無法找到模塊的「遊戲」。