0

私の実際の主な活動である「PhotoManagement」という簡単なクラスを作成しました。その後、アクティビティを拡張する別のクラスを作成します。この 2 番目のクラス内で、レイアウトを実用的に作成するために他のクラスで呼び出したいメソッド (現在は空) を作成しました。私が今やろうとしているのは、単純な呼び出しだけです。非常に単純なはずですが、null ポインター例外が発生します。私が間違っていることを理解するのを手伝ってもらえますか?主な活動は次のとおりです。

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

photoManagement クラスはマニフェストに存在しますが、photoManagementLayout クラスは存在しません。

ありがとう

4

4 に答える 4

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)

NullPointerExceptionPhotoManagement.onCreate()

PhotoManagementLayout photoManagementLayout;

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

これphotoManagementLayoutは明らかにnull、初期化したことがないためです。

PhotoManagementLayout photoManagementLayoutオブジェクトphotoManagementLayoutへの参照である変数を宣言するだけです。PhotoManagementLayoutデフォルトでは、参照は に初期化されnullます。

于 2013-09-30T10:15:28.947 に答える
1

photoManagementLayout = new PhotoManagementLayout()

photoManagementLayoutこれは、への呼び出しが実行される前に必要です

于 2013-09-30T10:15:55.210 に答える
1

あなたの photoManagementLayout は null です。初期化されていません。

さらに、両方のクラスがアクティビティを拡張しており、別のアクティビティ内でアクティビティを使用しています。

アクティビティは、インテントを介して次々に起動されることを意図しており、new キーワードを使用してインスタンス化できる通常のクラスではありません。したがって、ここでの問題は単純な NullPointerException ではなく、Android ワークフローを誤解しています。

メソッド コードを PhotoManager アクティビティのコアに直接配置してみませんか?

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

buildLayout メソッドを取得して PhotManagment アクティビティに直接配置し、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));
}

}
于 2013-09-30T10:19:04.400 に答える