아래가 프래그먼트에서 데이터를 받아서 넣으려고하는 부분입니다.
public class Fragment4 extends Fragment {
GalleryAdapter3 adapter;
ImageLoader imageLoader;
GridView gridGallery;
ImageView imgNoMedia;
ArrayList<PhotoItem> temp;
@Override
public View onCreateView(final LayoutInflater inflater,
final ViewGroup container, final Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.gallery, null);
gridGallery = (GridView) v.findViewById(R.id.grid);
imgNoMedia = (ImageView) v.findViewById(R.id.imgNoMedia);
initImageLoader();
adapter.addAll(getGalleryPhotos());
checkImageStatus();
adapter = new GalleryAdapter3(getActivity(), imageLoader);
gridGallery.setOnItemClickListener(mItemMulClickListener);
gridGallery.setAdapter(adapter);
return v;
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
temp = adapter.getSelected();
}
private void checkImageStatus() {
if (adapter.isEmpty()) {
imgNoMedia.setVisibility(View.VISIBLE);
} else {
imgNoMedia.setVisibility(View.GONE);
}
}
private void initImageLoader() {
// ClientConnectionManager manager = new ThreadSafeClientConnManager(params, schemeRegistry);
DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true).cacheOnDisk(true)
.resetViewBeforeLoading(true).considerExifParams(false)
.bitmapConfig(Bitmap.Config.ARGB_8888).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getActivity())
.memoryCacheExtraOptions(800, 800)
// default = device screen dimensions
.diskCacheExtraOptions(800, 800, null)
.threadPoolSize(5)
// default Thread.NORM_PRIORITY - 1
.threadPriority(Thread.NORM_PRIORITY)
// default FIFO
.tasksProcessingOrder(QueueProcessingType.LIFO)
// default
// .denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13)
// default
.diskCache(
new UnlimitedDiskCache(StorageUtils.getCacheDirectory(
getActivity(), true)))
// default
.diskCacheSize(50 * 1024 * 1024).diskCacheFileCount(100)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
// default
.imageDecoder(new BaseImageDecoder(false))
// default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// default
.defaultDisplayImageOptions(imageOptions).build();
ImageLoader.getInstance().init(config);
imageLoader = ImageLoader.getInstance();
}
AdapterView.OnItemClickListener mItemMulClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> l, View v, int position, long id) {
adapter.changeSelection(v, position);
}
};
private ArrayList<PhotoItem> getGalleryPhotos() {
ArrayList<PhotoItem> galleryList = new ArrayList<PhotoItem>();
try {
final String[] columns = {MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID};
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = getActivity().getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
null, null, orderBy);
if (imagecursor != null && imagecursor.getCount() > 0) {
while (imagecursor.moveToNext()) {
PhotoItem item = new PhotoItem();
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
item.sdcardPath = imagecursor.getString(dataColumnIndex);
if (temp != null)
for (PhotoItem gallery : temp) {
if (gallery.sdcardPath.equals(item.sdcardPath))
item.isSeleted = true;
}
if (new File(item.sdcardPath).exists()) galleryList.add(item);
}
}
if (imagecursor != null) {
imagecursor.close();
}
} catch (Exception e) {
e.printStackTrace();
}
// show newest photo at beginning of the list
Collections.reverse(galleryList);
return galleryList;
}
@Override
public void onDestroy() {
ImageLoader.getInstance().clearMemoryCache();
super.onDestroy();
}
로그캣입니다. 밑에 보시면 데이터가 안받아진다는 건데 액티비티에선 잘됫는데 프래그먼트로 가져와서 getActivity. contentsResolver로 햇는데도 null 이되는 이유가 뭘까요 ㅠㅠ 도와주시면 감사하겟습니다 고수님들 !!
08-15 19:43:30.425 27895-27895/com.example.kim.feelteller2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.kim.feelteller2, PID: 27895
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kim.feelteller2/com.xinlan.imageeditlibrary.picchooser.SelectPictureActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.xinlan.imageeditlibrary.picchooser.GalleryAdapter3.addAll(java.util.ArrayList)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
at android.app.ActivityThread.access$1100(ActivityThread.java:222)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.xinlan.imageeditlibrary.picchooser.GalleryAdapter3.addAll(java.util.ArrayList)' on a null object reference