2012-08-29 130 views
0

Java:android SDK 如何在onCreate()方法中調用另一個類的方法?如何在onCreate方法中調用另一個類的方法?

的logcat:

08-28 22:27:24.152: W/dalvikvm(13642): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
08-28 22:27:24.156: E/AndroidRuntime(13642): FATAL EXCEPTION: main 
08-28 22:27:24.156: E/AndroidRuntime(13642): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.valgriz.high.low/com.valgriz.high.low.Game}: java.lang.NullPointerException 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.os.Looper.loop(Looper.java:130) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread.main(ActivityThread.java:3687) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at java.lang.reflect.Method.invokeNative(Native Method) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at java.lang.reflect.Method.invoke(Method.java:507) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at dalvik.system.NativeStart.main(Native Method) 
08-28 22:27:24.156: E/AndroidRuntime(13642): Caused by: java.lang.NullPointerException 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.Activity.findViewById(Activity.java:1647) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.valgriz.high.low.Package.runThis(Package.java:16) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.valgriz.high.low.Game.onCreate(Game.java:34) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
08-28 22:27:24.156: E/AndroidRuntime(13642): ... 11 more 
+0

看起來像任何對象,你在呼喚findViewById()上爲空。是否有可能發佈您的onCreate()方法或只是其中的一部分? – bennettaur

+0

如果您從上往下跟蹤堆棧跟蹤,則可以在findViewById之前看到com.valgriz.high.low.Package.runThis()方法。如果你可以發佈源代碼,這將有所幫助。 –

回答

2

事情是這樣的:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    MyClass work = new MyClass(); 
    work.doSomething(); 

} 

public class MyClass{ 

    public void doSomething(){ 
     Log.d("tag", "yes sir!"); 
    } 
} 
2

獲取一個類的實例,並調用該方法。

或者如果該方法是通過類名稱靜態訪問的。

根據方法是否對UI執行某些操作或訪問在onCreate()方法之後設置的數據結構,Android中有一些限制。如果你包含更多的細節,你可能會得到更準確的幫助。

如果你不知道我在說什麼,開始谷歌搜索

+0

我知道如何在Java中調用方法。但是,當我編程的應用程序,它給了我錯誤。感謝您的迴應。 – Steven

+0

發佈錯誤的logcat以及您正在嘗試執行的代碼。我們需要更多的工作來解決問題。 – bennettaur

+0

好的,我發佈了日誌 – Steven

1

您需要聲明和實例化類對象或調用它取​​決於它是否是靜態的。

private NonStaticObject dynamicObject; 
private StaticObject stObject; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //instantiate the non static object 
    dynamicObject = new NonStaticObject(); 
    dynamicObject.method(); 

    //or simply call the static method. 
    stObject.method(); 

} 
+0

以上只是如何調用方法的一個示例。您需要創建NonStaticObject和StaticObject,將它們命名爲您希望或使用現有框架對象的方式。 – CyberTengu

0

從日誌(以下代碼段),它看起來像您嘗試使用一個錯誤的ID 視圖中不存在找到一個視圖/實例化/創建/已被刪除。

08-28 22:27:24.156: E/AndroidRuntime(13642): Caused by: java.lang.NullPointerException 
08-28 22:27:24.156: E/AndroidRuntime(13642): at android.app.Activity.findViewById(Activity.java:1647) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.valgriz.high.low.Package.runThis(Package.java:16) 
08-28 22:27:24.156: E/AndroidRuntime(13642): at com.valgriz.high.low.Game.onCreate(Game.java:34) 

請檢查您試圖查找的視圖的創建是否完整,並且您使用正確的編號引用它。

此外,根據android docs (transcript below)onCreate(Bundle)應滿足以下條件。請從onCreate(Bundle)方法遊戲類的第一行中檢查是否使用super.onCreate(savedInstanceState);打電話給父母。

派生類必須調用超類的這個方法的實現。如果他們不這樣做,就會拋出異常。

0

你可以這樣做:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // call method from other class 
    myclass Objectc = new myclass(); 
    Objectc.methodA(); 
} 
相關問題