마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

그리드뷰 어뎁터에 커서로 데이터를 받아서 넣는데 널 에러가 뜨는데 도와주세요 ㅠㅠ

0 추천
아래가 프래그먼트에서 데이터를 받아서 넣으려고하는 부분입니다.

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
익명사용자 님이 2016년 8월 15일 질문

1개의 답변

0 추천

adapter.addAll(getGalleryPhotos());

checkImageStatus();

adapter = new GalleryAdapter3(getActivity(), imageLoader);

위 코드를 아래와 같이 바꾸면 되겠네요..

 

checkImageStatus();

adapter = new GalleryAdapter3(getActivity(), imageLoader);

adapter.addAll(getGalleryPhotos());

isul (7,920 포인트) 님이 2016년 8월 16일 답변
감사합니다 덕분에 페이지 넘어가는 부분은 해결이 되엇는데 중요한건 imageload가 바로되는게 아니라 프래그먼트를 껏다켯다 3번정도해야 나오는데 이부분은 왜그런지 알 수 있을까요? ㅠㅠ 에러로그도 안떠서 어디가 문제인지 감이안잡히네요 ㅠㅠ
아 해결햇습니다 역시나 코드 순서를 잘못햇엇네요 감사합니다 !! ㅠㅠ
...