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

안드로이드 로직문제입니다. ㅜㅜ

0 추천
private long findThumbList() {
  long returnValue = 0;
  long returnValues = 0;
  // Select 하고자 하는 컬럼
  String[] projection = { MediaStore.Images.Thumbnails._ID,
    MediaStore.Images.Thumbnails.DATA,
    MediaStore.Images.Thumbnails.IMAGE_ID };

  String[] projection2 = { MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DATA };

  // 썸네일 이미지 불러

  Cursor imageCursor = managedQuery(
    MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection,
    null, null, MediaStore.Images.Media.DATE_ADDED + " desc ");

  // 이미지편집으로 넘길 이미지쿼리F
  Cursor imageCursoredit = managedQuery(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection2,
    null, null, MediaStore.Images.Media.DATE_ADDED + " desc ");

  if (imageCursor != null && imageCursor.getCount() > 0) {
   // 컬럼 인덱스
   int imageIDCol = imageCursor
     .getColumnIndex(MediaStore.Images.Media._ID);
   int imageDataCol = imageCursor
     .getColumnIndex(MediaStore.Images.Media.DATA);

   int imageIDColedit = imageCursoredit
     .getColumnIndex(MediaStore.Images.Media._ID);
   int imageDataColedit = imageCursoredit
     .getColumnIndex(MediaStore.Images.Media.DATA);

   // 커서에서 이미지의 ID와 경로명을 가져와서 ThumbImageInfo 모델 클래스를 생성해서
   // 리스트에 더해준다.
   while (imageCursor.moveToNext()) {
    GalleryItem thumbInfo = new GalleryItem();

    thumbInfo.setId(imageCursor.getString(imageIDCol));
    thumbInfo.setData(imageCursor.getString(imageDataCol));

    String path = imageCursor.getString(imageDataCol);

    BitmapFactory.Options option = new BitmapFactory.Options();

    // 이미지사이즈 조절! 필수요소 안하면 메모리초과로 오류튕김
    if (new File(path).length() > 100000) {
     option.inSampleSize = 2;

    } else {
     option.inSampleSize = 2;

    }

    Bitmap bmp = BitmapFactory.decodeFile(path, option);

    thumbInfo.setBitmap(bmp);

    thumbInfo.setCheckedState(false);

    mThumbImageInfoList.add(thumbInfo);

    returnValue++;
   }

   while (imageCursoredit.moveToNext()) {
    GalleryItem thumbInfo = new GalleryItem();

    thumbInfo.setId2(imageCursoredit.getString(imageIDColedit));
    thumbInfo.setData2(imageCursoredit.getString(imageDataColedit));

    String path2 = imageCursoredit.getString(imageDataColedit);

    BitmapFactory.Options option2 = new BitmapFactory.Options();

    // 이미지사이즈 조절! 필수요소 안하면 메모리초과로 오류튕김
    if (new File(path2).length() > 100000) {

     option2.inSampleSize = 10;
    } else {

     option2.inSampleSize = 10;
    }

    thumbInfo.setCheckedState2(false);

    mThumbImageInfoList.add(thumbInfo);

    returnValues++;
   }

  }
  // 이거 리쥼시 오류떠서주석처리해버림!
  // imageCursor.close();
  return returnValue;
  
 }

 /*
  * private long findThumbList() {
  *
  * long returnValue = 0;
  *
  * String[] projection = { MediaStore.Images.Thumbnails._ID,
  * MediaStore.Images.Thumbnails.DATA, MediaStore.Images.Thumbnails.IMAGE_ID
  * }; Cursor objCursor =
  * managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
  * projection, null, null, MediaStore.Images.Thumbnails._ID + " desc ");
  *
  * if (objCursor != null && objCursor.getCount() > 0) { int imageIDCol =
  * objCursor.getColumnIndex(MediaStore.Images.Thumbnails._ID); int
  * imageDataCol =
  * objCursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA); int
  * thumbsImageIDCol =
  * objCursor.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID); String
  * strthumbsImageIDCol = ""; this.mThumbImageInfoList = new
  * ArrayList<GalleryItem>(); while (objCursor.moveToNext()) { GalleryItem
  * objImageInfo = new GalleryItem();
  *
  * objImageInfo.setId(objCursor.getString(imageIDCol));
  * objImageInfo.setData(objCursor.getString(imageDataCol));
  * strthumbsImageIDCol = objCursor.getString(thumbsImageIDCol); // bmp =
  * BitmapFactory.decodeFile(strPath, option);
  *
  * objImageInfo.setCheckedState(false); if(strthumbsImageIDCol != null) {
  * this.mThumbImageInfoList.add(objImageInfo); returnValue++; } } }
  * objCursor.close(); return returnValue; }
  */
 // 화면에 이미지들을 뿌려준다.
 private void updateUI() {
  mListAdapter = new ImageAdapter(this, R.layout.gallery_cell,
    mThumbImageInfoList);
  mGvImageList.setAdapter(mListAdapter);
 }

 // *****************************************************************************************
 // //
 // Image Adapter Class
 // *****************************************************************************************
 // //
 static class ImageViewHolder {
  ImageView ivImage;
  CheckBox chkImage;
 }

 private class ImageAdapter extends BaseAdapter {
  private Context mContext;
  private int mCellLayout;
  private LayoutInflater mLiInflater;
  private ArrayList<GalleryItem> mArrData;

  public ImageAdapter(Context c, int cellLayout,
    ArrayList<GalleryItem> thumbImageInfoList) {
   mContext = c;
   mCellLayout = cellLayout;
   mArrData = thumbImageInfoList;

   mLiInflater = (LayoutInflater) mContext
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }

  public int getCount() {
   return mArrData.size();
  }

  public Object getItem(int position) {
   return mArrData.get(position);
  }

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

  public View getView(final int position, View convertView,
    ViewGroup parent) {
   if (convertView == null) {
    convertView = mLiInflater.inflate(mCellLayout, parent, false);
    ImageViewHolder holder = new ImageViewHolder();

    holder.ivImage = (ImageView) convertView
      .findViewById(R.id.ivImage);
    holder.chkImage = (CheckBox) convertView
      .findViewById(R.id.chkImage);

    convertView.setTag(holder);
   }

   final ImageViewHolder holder = (ImageViewHolder) convertView
     .getTag();

   if (((GalleryItem) mArrData.get(position)).getCheckedState())
    holder.chkImage.setChecked(true);
   else
    holder.chkImage.setChecked(false);

   holder.ivImage.setImageBitmap(mArrData.get(position).getBitmap());

   setProgressBarIndeterminateVisibility(false);

   convertView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

     if (mArrData.get(position).getCheckedState() == true) {
      mArrData.get(position).setCheckedState(false);
      picArr.remove(mArrData.get(position).getData2());

      Log.i("gtest1", "현재 pic" + "값-?" + picArr);
      Log.i("gtest1", "현재체크개수-" + Chkcount);
      Chkcount--;

     } else {
      // 10번체크 로직세움
      if (Chkcount == 10) {
       mArrData.get(position).setCheckedState(false);
       Toast.makeText(getApplicationContext(),
         "사진은 최대 10개까지 선택가능합니다.", Toast.LENGTH_LONG)
         .show();
      } else {
       mArrData.get(position).setCheckedState(true);
       // 10개까지반영

       Log.i("gtest1", "데이터값받나?"
         + mArrData.get(position).getData());
       picArr.add(mArrData.get(position).getData2());
       Chkcount++;
       Log.i("gtest1", "현재위치 +?" + position);
       Log.i("gtest1", "현재 pic값+?" + picArr);
       Log.i("gtest1", "현재 pic개수+?" + picArr.size());
      }

     }
     mListAdapter.notifyDataSetChanged();

    }
   });

   return convertView;
  }
 }

 // asyc로 반응성개선함.
 private class DoFindImageList extends AsyncTask<String, Integer, Long> {
  @Override
  protected void onPreExecute() {
   mLoagindDialog = ProgressDialog.show(GalleryListMain.this, null,
     "이미지로딩중...", true, true);

   mLoagindDialog.setCanceledOnTouchOutside(false);
   super.onPreExecute();

  }

  @Override
  protected Long doInBackground(String... arg0) {
   long returnValue = 0;
   returnValue = findThumbList();
   return returnValue;
  }

  @Override
  protected void onPostExecute(Long result) {
   updateUI();

   mLoagindDialog.dismiss();
  }

  @Override
  protected void onCancelled() {
   super.onCancelled();
  }
 }

 

이미지를 불러오는 속도때문에 원본이아닌 썸네일로 불러와서 그리드뷰에 띄워주었는데요

 섬네일이미지를 원본처럼하면  당연히 사진이 커지면서 화질이구려지기때문에..

그래서 이미지편집부인 다른액티비티에서 url값을받으면 썸네일로불러오기때문에 원본url값을 받고싶어 커서문을 한번더불렀지만..  id값이 다르기때문에 당연히 사진들은 null값이 뜹니다.

이미지편집 액티비티로 보낼때 어떻게 처리해야할까요..
익명사용자 님이 2015년 11월 18일 질문

답변 달기

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