В принципе, я делаю приложение для конвертирования Android, и сейчас я нахожусь в настройке игрового поля. Способ, которым я намереваюсь это сделать, - создать 2D-массив класса позиции. Каждая позиция представлена представлением изображения, которое используется как кнопка, которая представляет собой положение платы. Вот фрагмент кода, который содержит ошибку:Как удалить ошибку при объявлении массива класса в Android
setupBoard(board);
....
public void setupBoard(Position board[][]) {
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 8; x++) {
Log.d("Error","Error a");
board[x][y] = new Position(getApplicationContext());
Log.d("Error","Error b");
board[x][y].isPositionEmpty = true;
}
}
}
В классе позиции:
public class Position {
Context myContext;
public Position(Context context) {
Log.d("Error","Error c");
myContext = context;
// TODO Auto-generated constructor stub
}
public boolean isPositionEmpty = true;
public int positionID;
public ImageView button = new ImageView(myContext);
}
Программа получает ошибки а, но не дальше. Ошибка в LogCat: java.lang.NullPointerException
Любая помощь будет очень признательна. Заранее спасибо!
Исключение: 02-20 16: 52: 20,820: ОШИБКА/AndroidRuntime (365): неустранимая: Основной 02-20 16: 52: 20,820: ОШИБКА/AndroidRuntime (365): java.lang.RuntimeException: Невозможно создать экземпляр активности ComponentInfo {trinity.hazard.reversi/trinity.hazard.reversi.SinglePlayerActivity}: java.lang.NullPointerException 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app.ActivityThread. performLaunchActivity (ActivityThread.java:2585) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 02-20 16: 52: 20.8 20: ОШИБКА/AndroidRuntime (365): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.os.Handler. dispatchMessage (Handler.java:99) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.os.Looper.loop (Looper.java:123) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app.ActivityThread.main (ActivityThread.java:4627) 02-20 16: 52: 20.820: ОШИБКА/AndroidRuntime (365): at java.lang.reflect.Method.invokeNative (Native Method) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at java.lang.reflect.Method.invoke (Method.java:521) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 02-20 16: 52: 20.820: ERROR/AndroidR (365): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at dalvik.system.NativeStart.main (Native Method) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): вызвано: java.lang.NullPointerException 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.content. ContextWrapper.getApplicationContext (ContextWrapper.java:100) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at trinity.hazard.reversi.SinglePlayerActivity. (SinglePlayerActivity.java:24) 02-20 16:52 : 20.820: ОШИБКА/AndroidRuntime (365): at java.lang.Class.newInstanceImpl (собственный метод) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at java.lang.Class.newInstance (класс. java: 1429) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app. Instrumentation.newActivity (Instrumentation.java:1021) 02-20 16: 52: 20.820: ERROR/AndroidRuntime (365): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2577) 02-20 16:52: 20.820: ОШИБКА/AndroidRuntime (365): ... 11 далее
Ох, ты прав. Это проблема. Хороший улов! Однако я бы предложил удалить ссылку на контекст с позиции и просто инициализировать ImageView с ней. Чем меньше ссылок на контекст, тем лучше. – dmon
m1ntf4n: Это не позволит мне, singlePlayerActivity не может видеть кнопки. спасибо за помощь в любом случае – hazard1994
Рад, что я мог бы помочь. Всегда помните, что любая инициализация, которую вы выполняете вне конструктора, будет фактически скопирована в начало каждого конструктора (но после вызова super(), если я не ошибаюсь). – m1ntf4n