2012-02-20 2 views
0

В принципе, я делаю приложение для конвертирования 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 далее

ответ

2

В классе Position попробуйте переместить линию, в которой вы создаете ImageView, в конструктор, но ПОСЛЕ инициализации myContext.

+0

Ох, ты прав. Это проблема. Хороший улов! Однако я бы предложил удалить ссылку на контекст с позиции и просто инициализировать ImageView с ней. Чем меньше ссылок на контекст, тем лучше. – dmon

+0

m1ntf4n: Это не позволит мне, singlePlayerActivity не может видеть кнопки. спасибо за помощь в любом случае – hazard1994

+0

Рад, что я мог бы помочь. Всегда помните, что любая инициализация, которую вы выполняете вне конструктора, будет фактически скопирована в начало каждого конструктора (но после вызова super(), если я не ошибаюсь). – m1ntf4n

Смежные вопросы