2012-08-29 127 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(); 
} 
相关问题