안녕하세요.
나 홀로 안드로이드를 공부하고 있습니다.
보시기 편하게 불필요한 소스는 삭제했습니다.
코드해드라이터로 하려고 했는데, 크롬에서는 안되서.... 그냥 말았습니다. 그냥 봐주세용.
자세한 소개는 각설하고 본론으로 들어가서
FrameTest.java
public class FrameTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Main_Gallery(this));
}
}
위 엑티비티에서 갤러리 클래스를 호출해서 보여주려고 합니다.
Main_Gallery.java
public class Main_Gallery extends View {
public Main_Gallery(Context context) {
super(context);
// TODO Auto-generated constructor stub
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(context));
//이 부분에 에러가 나는 곳 입니다.
// 메인 엑티비티에서 this를 넘겨주고, ImageAdapter로 context를 넘겨주려고 하는데, 자꾸 에러가 나네요.
// 기초도 없고 책만 보고 하려니까 자꾸 막히네요.
// 안드로이드 박사님들 도와주세요~~!!!
}
public class ImageAdapter extends BaseAdapter {
// int mGalleryItemBackground;
private Context mContext;
private int mImageIds[] = new int[stage];
public ImageAdapter(Context context) {
mContext = context;
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setLayoutParams(new Gallery.LayoutParams(WindowWidth, WindowHeight/2));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
return i;
}
}
}
07-14 12:12:47.213: ERROR/show_Gallery(4183): Main_Gallery ImageAdapter() 07-14 12:12:47.223: ERROR/show_Gallery(4183): Main_Gallery init() 07-14 12:12:47.242: DEBUG/AndroidRuntime(4183): Shutting down VM 07-14 12:12:47.252: WARN/dalvikvm(4183): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 07-14 12:12:47.252: ERROR/AndroidRuntime(4183): Uncaught handler: thread main exiting due to uncaught exception 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ssamkj.frametest/com.ssamkj.frametest.FrameTest}: java.lang.NullPointerException 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.os.Handler.dispatchMessage(Handler.java:99) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.os.Looper.loop(Looper.java:123) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread.main(ActivityThread.java:4363) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at java.lang.reflect.Method.invokeNative(Native Method) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at java.lang.reflect.Method.invoke(Method.java:521) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at dalvik.system.NativeStart.main(Native Method) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): Caused by: java.lang.NullPointerException 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at com.ssamkj.frametest.Main_Gallery.<init>(Main_Gallery.java:41) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at com.ssamkj.frametest.FrameTest.onCreate(FrameTest.java:24) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 07-14 12:12:47.282: ERROR/AndroidRuntime(4183): ... 11 more




setContentView()가 호출이 되기 전에 findViewById()이 호출 되면 NULL을 리턴합니다.
그래서, Gallery g = (Gallery) findViewById(R.id.gallery); 에서 g 값이 NULL이 됩니다.
그리고, 코드를 보니 XML 레이아웃 사용하는 것이랑 View 동적 생성하는 부분에 대해 정리가 필요하실 듯 하네요.