错误:在另一个类中调用方法时“无法启动活动ComponentInfo”

时间:2013-09-30 10:12:32

标签: android runtimeexception

我创建了一个名为“PhotoManagement”的简单类,这是我的实际主要活动。 完成后,我创建另一个类,扩展活动。 在第二个类中,我创建了一个方法(现在是空的),我希望在另一个类中调用以实际创建布局。我现在要做的只是一个简单的电话。 它应该非常简单,但我收到一个空指针异常。那么请你帮我理解我做错了什么? 这是主要活动:

public class PhotoManagement extends Activity{

PhotoManagementLayout photoManagementLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    photoManagementLayout.buildLayout();
}

}

这是将来应该创建布局的类:

public class PhotoManagementLayout extends Activity{

  public void buildLayout(){
    ScrollView scrollView = new ScrollView(this); //create a new scrollView
    scrollView.setBackground(getResources().getDrawable(R.drawable.background)); //give the background gradient
    scrollView.setLayoutParams(new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, //set the main params about the dynamic size of the scrollView
                                                 ScrollView.LayoutParams.MATCH_PARENT));
    scrollView.setPadding(0, 20, 0, 0);
    setContentView(scrollView);
  }
}

这是我正在接受的错误:

09-30 09:58:27.495: E/AndroidRuntime(3102): FATAL EXCEPTION: main
09-30 09:58:27.495: E/AndroidRuntime(3102): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dilandprints2/com.example.dilandprints2.PhotoManagement}: java.lang.NullPointerException
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.os.Looper.loop(Looper.java:137)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread.main(ActivityThread.java:5041)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at java.lang.reflect.Method.invokeNative(Native Method)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at java.lang.reflect.Method.invoke(Method.java:511)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at dalvik.system.NativeStart.main(Native Method)
09-30 09:58:27.495: E/AndroidRuntime(3102): Caused by: java.lang.NullPointerException
09-30 09:58:27.495: E/AndroidRuntime(3102):     at com.example.dilandprints2.PhotoManagement.onCreate(PhotoManagement.java:21)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.Activity.performCreate(Activity.java:5104)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-30 09:58:27.495: E/AndroidRuntime(3102):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-30 09:58:27.495: E/AndroidRuntime(3102):     ... 11 more

照片管理类出现在清单上,而photoManagementLayout类则没有。

由于

4 个答案:

答案 0 :(得分:1)

Caused by: java.lang.NullPointerException
    at com.example.dilandprints2.PhotoManagement.onCreate(PhotoManagement.java:21)

photoManagementLayout

看起来photoManagementLayout.buildLayout();为空

答案 1 :(得分:1)

09-30 09:58:27.495: E/AndroidRuntime(3102): Caused by: java.lang.NullPointerException
09-30 09:58:27.495: E/AndroidRuntime(3102):     at com.example.dilandprints2.PhotoManagement.onCreate(PhotoManagement.java:21)
NullPointerException

中的

PhotoManagement.onCreate()

PhotoManagementLayout photoManagementLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    photoManagementLayout.buildLayout();
}

此处photoManagementLayout显然是null,因为您从未初始化它。

PhotoManagementLayout photoManagementLayout只声明一个变量photoManagementLayout,它是PhotoManagementLayout对象的引用。默认情况下,引用初始化为null

答案 2 :(得分:1)

photoManagementLayout = new PhotoManagementLayout()

在执行对photoManagementLayout的任何调用之前需要这样做

答案 3 :(得分:1)

您的photoManagementLayout为空,尚未初始化。

此外,您的两个课程都在扩展活动,并且您在另一个课程中使用了活动。

活动意味着通过意图一个接一个地启动,它们不是可以使用新关键字实例化的普通类。 所以你的问题不仅仅是一个简单的NullPointerException,你误解了Android的工作流程。

为什么不直接将方法代码放在PhotoManager活动的核心?

-----------------------------------------------

只需将您的buildLayout方法直接放入PhotManagment Acticity,然后在onCreate中调用它,它应该可以工作


修改 以下是(或多或少)将方法buildLayout与活动分离的方法:

public class PhotoManagementLayout {
      public static View buildLayout(Context context){
        ScrollView scrollView = new ScrollView(context); //create a new scrollView
        scrollView.setBackground(context.getResources().getDrawable(R.drawable.background)); //give the background gradient
        scrollView.setLayoutParams(new ScrollView.LayoutParams(ScrollView.LayoutParams.MATCH_PARENT, //set the main params about the dynamic size of the scrollView
                                                     ScrollView.LayoutParams.MATCH_PARENT));
        scrollView.setPadding(0, 20, 0, 0);
        return scrollView ; 
      }
}

在onCreate中:

public class PhotoManagement extends Activity{



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(PhotoManagementLayout.buildLayout(this));
}

}