我创建了一个名为“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类则没有。
由于
答案 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));
}
}