마스터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
Edge_JH (200 포인트) 님이 2016년 8월 15일 질문
GalleryAdapter3클래스에서 오류가 나는거 같은데 해당 클래스 코드는 없네요?? 아니면 제가 못찾는건지;;;
public class GalleryAdapter3 extends BaseAdapter {


    private LayoutInflater infalter;
    private ArrayList<PhotoItem> data = new ArrayList<PhotoItem>();
    private ArrayList<PhotoItem> selectedData = new ArrayList<PhotoItem>();
    private HashSet<ViewHolder> getViewHolderSet = new HashSet<ViewHolder>();
    ImageLoader imageLoader;


    public GalleryAdapter3(Context c, ImageLoader imageLoader) {
        infalter = (LayoutInflater) c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.imageLoader = imageLoader;
    }


    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public PhotoItem getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }


    public ArrayList<PhotoItem> getSelected() {
        ArrayList<PhotoItem> dataT = new ArrayList<PhotoItem>();

        for (PhotoItem aData : data) {
            if (aData.isSeleted) {
                dataT.add(aData);
            }
        }

        return dataT;
    }

    public void addAll(ArrayList<PhotoItem> files) {

        try {
            this.data.clear();
            this.data.addAll(files);

        } catch (Exception e) {
            e.printStackTrace();
        }

        notifyDataSetChanged();
    }

    public void changeSelection(View v, int position) {
        Iterator<ViewHolder> iterator = getViewHolderSet.iterator();


        PhotoItem photoItem = data.get(position);
        if (photoItem.isSeleted) {
            photoItem.isSeleted = false;
            selectedData.remove(photoItem);
            v.findViewById(R.id.checkimage).setVisibility(View.INVISIBLE);
            v.findViewById(R.id.count_text).setVisibility(View.INVISIBLE);

            while (iterator.hasNext()) {
                ViewHolder viewHolder = iterator.next();

                if (viewHolder.photoItem.isSeleted) {
                    int index = selectedData.indexOf(viewHolder.photoItem) + 1;
                    viewHolder.textOrder.setText(String.valueOf(index));

                } else {
                    iterator.remove();
                }
            }

        } else {
            photoItem.isSeleted = true;
            selectedData.add(photoItem);
            v.findViewById(R.id.checkimage).setVisibility(View.VISIBLE);
            v.findViewById(R.id.count_text).setVisibility(View.VISIBLE);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.selectimage = (ImageView) v.findViewById(R.id.checkimage);
            viewHolder.textOrder = ((TextView) v.findViewById(R.id.count_text));
            int index = selectedData.indexOf(photoItem) + 1;
            viewHolder.textOrder.setText(String.valueOf(index));
            viewHolder.photoItem = getItem(position);
            getViewHolderSet.add(viewHolder);
        }

    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {

            convertView = infalter.inflate(R.layout.allimageitem, parent, false);

            holder = new ViewHolder();
            holder.imgPhoto = (ImageView) convertView
                    .findViewById(R.id.icon);

            holder.textOrder = (TextView) convertView
                    .findViewById(R.id.count_text);
            holder.selectimage = (ImageView) convertView.findViewById(R.id.checkimage);

            holder.rootView = convertView;

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.imgPhoto.setTag(position);

        try {
            imageLoader.cancelDisplayTask(holder.imgPhoto);
            imageLoader.displayImage("file://" + data.get(position).sdcardPath,
                    holder.imgPhoto);

            holder.textOrder.setText(String.valueOf(selectedData.indexOf(data.get(position)) + 1));
            holder.textOrder.setVisibility(data.get(position).isSeleted ? View.VISIBLE : View.GONE);
            holder.selectimage.setVisibility(data.get(position).isSeleted ? View.VISIBLE : View.GONE);
            if (data.get(position).isSeleted) {
                holder.photoItem = data.get(position);
                getViewHolderSet.add(holder);

            } else {
                getViewHolderSet.remove(holder);
                holder.rootView.setBackgroundResource(R.color.transparent);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }

        return convertView;
    }

    public class ViewHolder {
        PhotoItem photoItem;
        View rootView;
        ImageView imgPhoto,selectimage;
        TextView textOrder;
    }
}
이거입니다!!! 도와주시면 정말 감사하겟습니다 이것때문에 이틀동안 삽질하고잇습니다 ㅠㅠ

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...